Showing preview only (4,627K chars total). Download the full file or copy to clipboard to get everything.
Repository: bucaps/marss-riscv
Branch: master
Commit: 82b3ce2738f1
Files: 314
Total size: 4.4 MB
Directory structure:
gitextract_e6jvuvxv/
├── .gitignore
├── .gitmodules
├── Changelog.md
├── LICENSE.md
├── README.md
├── configs/
│ ├── riscv64_inorder_soc.cfg
│ └── riscv64_outoforder_soc.cfg
└── src/
├── DRAMsim3/
│ ├── .clang-format
│ ├── .gitignore
│ ├── .gitmodules
│ ├── .travis.yml
│ ├── CMakeLists.txt
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── configs/
│ │ ├── DDR3_1Gb_x8_1333.ini
│ │ ├── DDR3_4Gb_x16_1600.ini
│ │ ├── DDR3_4Gb_x16_1866.ini
│ │ ├── DDR3_4Gb_x4_1600.ini
│ │ ├── DDR3_4Gb_x4_1866.ini
│ │ ├── DDR3_4Gb_x8_1600.ini
│ │ ├── DDR3_4Gb_x8_1866.ini
│ │ ├── DDR3_8Gb_x16_1600.ini
│ │ ├── DDR3_8Gb_x16_1866.ini
│ │ ├── DDR3_8Gb_x4_1600.ini
│ │ ├── DDR3_8Gb_x4_1866.ini
│ │ ├── DDR3_8Gb_x8_1600.ini
│ │ ├── DDR3_8Gb_x8_1866.ini
│ │ ├── DDR4_4Gb_x16_1866.ini
│ │ ├── DDR4_4Gb_x16_2133.ini
│ │ ├── DDR4_4Gb_x16_2133_2.ini
│ │ ├── DDR4_4Gb_x16_2400.ini
│ │ ├── DDR4_4Gb_x16_2400_2.ini
│ │ ├── DDR4_4Gb_x16_2666.ini
│ │ ├── DDR4_4Gb_x16_2666_2.ini
│ │ ├── DDR4_4Gb_x4_1866.ini
│ │ ├── DDR4_4Gb_x4_2133.ini
│ │ ├── DDR4_4Gb_x4_2133_2.ini
│ │ ├── DDR4_4Gb_x4_2400.ini
│ │ ├── DDR4_4Gb_x4_2400_2.ini
│ │ ├── DDR4_4Gb_x4_2666.ini
│ │ ├── DDR4_4Gb_x4_2666_2.ini
│ │ ├── DDR4_4Gb_x8_1866.ini
│ │ ├── DDR4_4Gb_x8_2133.ini
│ │ ├── DDR4_4Gb_x8_2133_2.ini
│ │ ├── DDR4_4Gb_x8_2400.ini
│ │ ├── DDR4_4Gb_x8_2400_2.ini
│ │ ├── DDR4_4Gb_x8_2666.ini
│ │ ├── DDR4_4Gb_x8_2666_2.ini
│ │ ├── DDR4_8Gb_x16_1866.ini
│ │ ├── DDR4_8Gb_x16_2133.ini
│ │ ├── DDR4_8Gb_x16_2133_2.ini
│ │ ├── DDR4_8Gb_x16_2400.ini
│ │ ├── DDR4_8Gb_x16_2400_2.ini
│ │ ├── DDR4_8Gb_x16_2666.ini
│ │ ├── DDR4_8Gb_x16_2666_2.ini
│ │ ├── DDR4_8Gb_x16_2933.ini
│ │ ├── DDR4_8Gb_x16_2933_2.ini
│ │ ├── DDR4_8Gb_x16_3200.ini
│ │ ├── DDR4_8Gb_x4_1866.ini
│ │ ├── DDR4_8Gb_x4_2133.ini
│ │ ├── DDR4_8Gb_x4_2133_2.ini
│ │ ├── DDR4_8Gb_x4_2400.ini
│ │ ├── DDR4_8Gb_x4_2400_2.ini
│ │ ├── DDR4_8Gb_x4_2666.ini
│ │ ├── DDR4_8Gb_x4_2666_2.ini
│ │ ├── DDR4_8Gb_x4_2933.ini
│ │ ├── DDR4_8Gb_x4_2933_2.ini
│ │ ├── DDR4_8Gb_x4_3200.ini
│ │ ├── DDR4_8Gb_x8_1866.ini
│ │ ├── DDR4_8Gb_x8_2133.ini
│ │ ├── DDR4_8Gb_x8_2133_2.ini
│ │ ├── DDR4_8Gb_x8_2400.ini
│ │ ├── DDR4_8Gb_x8_2400_2.ini
│ │ ├── DDR4_8Gb_x8_2666.ini
│ │ ├── DDR4_8Gb_x8_2666_2.ini
│ │ ├── DDR4_8Gb_x8_2933.ini
│ │ ├── DDR4_8Gb_x8_2933_2.ini
│ │ ├── DDR4_8Gb_x8_3200.ini
│ │ ├── GDDR5X_8Gb_x32.ini
│ │ ├── GDDR5_1Gb_x32.ini
│ │ ├── GDDR5_8Gb_x32.ini
│ │ ├── GDDR6_8Gb_x16.ini
│ │ ├── HBM1_4Gb_x128.ini
│ │ ├── HBM2_4Gb_x128.ini
│ │ ├── HBM2_8Gb_x128.ini
│ │ ├── HBM_4Gb_x128.ini
│ │ ├── HMC2_8GB_4Lx16.ini
│ │ ├── HMC_2GB_4Lx16.ini
│ │ ├── HMC_2GB_4Lx16_dummy.ini
│ │ ├── HMC_4GB_4Lx16.ini
│ │ ├── LPDDR3_8Gb_x32_1333.ini
│ │ ├── LPDDR3_8Gb_x32_1600.ini
│ │ ├── LPDDR3_8Gb_x32_1866.ini
│ │ ├── LPDDR4_8Gb_x16_2400.ini
│ │ ├── ST-1.2x.ini
│ │ ├── ST-1.5x.ini
│ │ ├── ST-2.0x.ini
│ │ ├── ddr3_debug.ini
│ │ ├── ddr4_debug.ini
│ │ └── lpddr_2Gb_x16.ini
│ ├── ext/
│ │ ├── fmt/
│ │ │ ├── LICENSE.rst
│ │ │ └── include/
│ │ │ └── fmt/
│ │ │ ├── core.h
│ │ │ ├── format-inl.h
│ │ │ └── format.h
│ │ └── headers/
│ │ ├── INIHLICENSE.txt
│ │ ├── INIReader.h
│ │ ├── args.hxx
│ │ ├── catch.hpp
│ │ └── json.hpp
│ ├── scripts/
│ │ ├── batch_run.py
│ │ ├── final_PowerTemperature_map.py
│ │ ├── heatmap.py
│ │ ├── parse_config.py
│ │ ├── plot_stats.py
│ │ ├── trace_gen.py
│ │ └── validation.py
│ ├── src/
│ │ ├── bankstate.cc
│ │ ├── bankstate.h
│ │ ├── channel_state.cc
│ │ ├── channel_state.h
│ │ ├── command_queue.cc
│ │ ├── command_queue.h
│ │ ├── common.cc
│ │ ├── common.h
│ │ ├── configuration.cc
│ │ ├── configuration.h
│ │ ├── controller.cc
│ │ ├── controller.h
│ │ ├── cpu.cc
│ │ ├── cpu.h
│ │ ├── dram_system.cc
│ │ ├── dram_system.h
│ │ ├── dramsim3.h
│ │ ├── hmc.cc
│ │ ├── hmc.h
│ │ ├── main.cc
│ │ ├── memory_system.cc
│ │ ├── memory_system.h
│ │ ├── refresh.cc
│ │ ├── refresh.h
│ │ ├── simple_stats.cc
│ │ ├── simple_stats.h
│ │ ├── sp_ienv.c
│ │ ├── thermal.cc
│ │ ├── thermal.h
│ │ ├── thermal_config.h
│ │ ├── thermal_replay.cc
│ │ ├── thermal_replay.h
│ │ ├── thermal_solver.c
│ │ ├── timing.cc
│ │ └── timing.h
│ └── tests/
│ ├── example.trace
│ ├── test_config.cc
│ ├── test_dramsys.cc
│ └── test_hmcsys.cc
├── MIT-LICENSE.txt
├── Makefile
├── VERSION
├── aes.c
├── aes.h
├── block_net.c
├── build_filelist.c
├── cutils.c
├── cutils.h
├── fbuf.h
├── fs.c
├── fs.h
├── fs_disk.c
├── fs_net.c
├── fs_utils.c
├── fs_utils.h
├── fs_wget.c
├── fs_wget.h
├── ide.c
├── ide.h
├── iomem.c
├── iomem.h
├── json.c
├── json.h
├── list.h
├── machine.c
├── machine.h
├── netinit.sh
├── pci.c
├── pci.h
├── pckbd.c
├── ps2.c
├── ps2.h
├── riscv_cpu.c
├── riscv_cpu.h
├── riscv_cpu_fp_template.h
├── riscv_cpu_priv.h
├── riscv_cpu_template.h
├── riscv_cpu_xlen_typedefs.h
├── riscv_machine.c
├── riscvsim/
│ ├── bpu/
│ │ ├── adaptive_predictor.c
│ │ ├── adaptive_predictor.h
│ │ ├── bht.c
│ │ ├── bht.h
│ │ ├── bpu.c
│ │ ├── bpu.h
│ │ ├── btb.c
│ │ ├── btb.h
│ │ ├── ras.c
│ │ └── ras.h
│ ├── core/
│ │ ├── inorder.c
│ │ ├── inorder.h
│ │ ├── inorder_backend.c
│ │ ├── inorder_frontend.c
│ │ ├── ooo.c
│ │ ├── ooo.h
│ │ ├── ooo_backend.c
│ │ ├── ooo_branch.c
│ │ ├── ooo_frontend.c
│ │ ├── ooo_lsu.c
│ │ ├── riscv_sim_cpu.c
│ │ └── riscv_sim_cpu.h
│ ├── decoder/
│ │ ├── fp_decode_template.h
│ │ ├── fp_execute_template.h
│ │ ├── fp_string_generator_template.h
│ │ ├── riscv_instruction.h
│ │ ├── riscv_isa_decoder.c
│ │ ├── riscv_isa_execute.c
│ │ └── riscv_isa_string_generator.c
│ ├── memory_hierarchy/
│ │ ├── cache.c
│ │ ├── cache.h
│ │ ├── dram.c
│ │ ├── dram.h
│ │ ├── dramsim_wrapper.cpp
│ │ ├── dramsim_wrapper.h
│ │ ├── dramsim_wrapper_c_connector.cpp
│ │ ├── dramsim_wrapper_c_connector.h
│ │ ├── memory_controller.c
│ │ ├── memory_controller.h
│ │ ├── memory_controller_utils.h
│ │ ├── memory_hierarchy.c
│ │ ├── memory_hierarchy.h
│ │ ├── ramulator_wrapper.cpp
│ │ ├── ramulator_wrapper.h
│ │ ├── ramulator_wrapper_c_connector.cpp
│ │ ├── ramulator_wrapper_c_connector.h
│ │ ├── temu_mem_map_wrapper.c
│ │ └── temu_mem_map_wrapper.h
│ ├── riscv_sim_macros.h
│ ├── riscv_sim_typedefs.h
│ └── utils/
│ ├── circular_queue.c
│ ├── circular_queue.h
│ ├── cpu_latches.c
│ ├── cpu_latches.h
│ ├── evict_policy.c
│ ├── evict_policy.h
│ ├── sim_exception.c
│ ├── sim_exception.h
│ ├── sim_log.c
│ ├── sim_log.h
│ ├── sim_params.c
│ ├── sim_params.h
│ ├── sim_stats.c
│ ├── sim_stats.h
│ ├── sim_trace.c
│ └── sim_trace.h
├── rtc_timer.c
├── rtc_timer.h
├── sdl.c
├── sha256.c
├── sha256.h
├── simplefb.c
├── slirp/
│ ├── bootp.c
│ ├── bootp.h
│ ├── cksum.c
│ ├── debug.h
│ ├── if.c
│ ├── if.h
│ ├── ip.h
│ ├── ip_icmp.c
│ ├── ip_icmp.h
│ ├── ip_input.c
│ ├── ip_output.c
│ ├── libslirp.h
│ ├── main.h
│ ├── mbuf.c
│ ├── mbuf.h
│ ├── misc.c
│ ├── misc.h
│ ├── sbuf.c
│ ├── sbuf.h
│ ├── slirp.c
│ ├── slirp.h
│ ├── slirp_config.h
│ ├── socket.c
│ ├── socket.h
│ ├── tcp.h
│ ├── tcp_input.c
│ ├── tcp_output.c
│ ├── tcp_subr.c
│ ├── tcp_timer.c
│ ├── tcp_timer.h
│ ├── tcp_var.h
│ ├── tcpip.h
│ ├── tftp.h
│ ├── udp.c
│ └── udp.h
├── softfp.c
├── softfp.h
├── softfp_template.h
├── softfp_template_icvt.h
├── splitimg.c
├── stats_display.c
├── temu.c
├── vga.c
├── virtio.c
├── virtio.h
└── vmmouse.c
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# exclude all object files
src/*.o
src/riscvsim/*.o
src/slirp/*.o
# exclude all dependency files
src/*.d
src/riscvsim/*.d
src/slirp/*.d
# exclude stats, log and trace files
src/*.csv
src/*.log
src/*.trace
# exclude executables
src/marss-riscv
src/sim-stats-display
src/build_filelist
src/splitimg
# exclude libraries
src/*.so
src/*.a
================================================
FILE: .gitmodules
================================================
================================================
FILE: Changelog.md
================================================
# Version 4.1a
- Added
- Model a arbitrary fixed latency between LLC cache and Memory controller
- Changed
- For Ramulator and DRAMSim3, memory access request is split into MEM_BUS_WIDTH sized parts and latency for each part is queried
- Fixed
- Rounding mode (rm) must be calculated again before executing FP instruction during simulation
# Version 4.0a
- Added
- Comprehensive logging support
- Command-line option `-sim-file-path` to specify a top-level directory to store statistics and log files
- Command-line option `-sim-file-prefix` to specify prefix appended to all simulator generated files
- Command-line option `-sim-emulate-after-icount` to specify the number of instruction to simulate after starting simulation mode
- [DRAMsim3](https://github.com/umd-memsys/DRAMSim3) support
- [Ramulator](https://github.com/CMU-SAFARI/ramulator) support
- Sample MARSS-RISCV configuration files for a 64-bit RISC-V In-order and Out-of-order SoC in [configs](./configs) folder
- More performance counters to count different types of load instructions (byte, half-word, word, double-word)
- Time-stamp to all the statistics files generated by the simulator
- Specify latency in CPU cycles for RISC-V `SYSTEM` class instructions in the config file
- Counter to track the number of CPU pipeline flushes
- Counters to tracks each type of software exceptions and hardware interrupt processed during simulation
- Parallel build support for Makefile
- During the simulation, `mtime` is calculated using simulation clock cycles
- Specify frequency for CPU and RTC device via the config file
- Add option `flush_on_context_switch` in the config file to enable/disable flushing of BPU on a context switch
- Start fetching the target from the next cycle on branch misprediction
- Load for non-word quantities (byte and half-word) take an extra one cycle on cache-hit
- Add function to invalidate entries in mem_request_queue on the miss-speculated path
- Changed
- Re-factor and modularize simulator code-base
- STORE type instructions submit write-request to L1-data cache and exit memory stage in a single cycle
- Delay for reading/writing page-table entries is now simulated via L1-Data cache
- Print IPC for all the RISC-V CPU modes after simulation completes to the console and log file
- In-order core doesn't support parallel execution in multiple functional units
- Replace hot-cold LRU eviction policy with bit-PLRU eviction policy for BTB and caches
- Improve the format of TinyEMU config file
- Update [MARSS-RISCV Docs](https://marss-riscv-docs.readthedocs.io/en/latest/)
- Update README.md
- Page walk delays are simulated via L1 D$
- Removed [DRAMsim2](https://github.com/umd-memsys/DRAMSim2) support
- Fixed
- Memory leaks
- Don't start simulating DRAM access delay until cache lookup delay is simulated
- Branch entry is added to BTB, only after the branch is resolved
# Version 3.1a
- Added
- Print TLB stats to the terminal after the simulation completes
- Specify latency for each FPU ALU instruction (`fadd`, `fsub`, `fmul`, `fdiv`, `fmin`, `fmax`, `fcvt`, `cvt`, `fle`, `flt`, `feq`, `fsgnj`, `fqsrt`, `fmv`, `fclass`) via TinyEMU config file
- Figure showing the high-level overview of MARSS-RISCV in README.md
- Changed
- Simplify the base DRAM model
- All memory accesses simulate a fixed latency `mem_access_latency`
- Any subsequent accesses to the same physical page occupies a lower delay, which is roughly 60 percent of the fixed `mem_access_latency`
- More info [here](https://marss-riscv-docs.readthedocs.io/en/latest/)
- Parallel operation of functional units can be enabled or disabled in the in-order core via TinyEMU config file
- Clean exception handling code
- Simulate page table entry read/write delays directly via memory controller using a configurable fixed latency `pte_rw_latency`
- Don't stall the pipeline stage for the write request to complete on the memory controller
- Make FPU-ALU non-pipelined
- Rename `dram_dispatch_queue` to`mem_request_queue`
- Update [MARSS-RISCV Docs](https://marss-riscv-docs.readthedocs.io/en/latest/)
- Update README.md
- Update TinyEMU config file [here](https://cs.binghamton.edu/~marss-riscv/marss-riscv-images.tar.gz)
- Fixed
- memory leaks
# Version 3.0a
- Added
- Support for separate RISC-V Bios and Kernel
- Command line option `flush-sim-mem` to flush simulator memory hierarchy on every fresh simulation run
- Command line option `sim-trace` to generate instruction commit trace during simulation
- Distinct configurable read-hit and write-hit latency for all the caches
- Return address stack (RAS)
- Branch prediction and speculative execution support for out of order core
- Print performance counters on terminal when the simulation completes
- More performance counters:
- Instruction types
- ecall
- page walks for loads, stores and instructions
- memory controller delay for data and instructions
- hardware interrupts
- Changed
- Port to TinyEMU version `2019-12-21`
- For bimodal branch predictor, store prediction bits in a separate Branch history table (BHT)
- For in-order core, non-memory instructions can forward their result from MEM stage in addition to EX stage
- For in-order core, relaxed interlocking on WAW data hazard
- Simplified out of order core design, ROB slots are now used as physical registers along with a single rename table and a single global issue queue
- Fixed
- Correctly calculated the rounding mode for floating pointing instruction decoding
- Converted `c.addiw` result buffer into `int32_t` on 64-bit simulation
- Set the data type to `unint64_t` for 64-bit simulation, for the buffer which holds the memory address for atomic instructions
- Issue #13 and #14 (thanks to Okhotnikov Grigory)
# Version 2.0a
- Added
- Added [DRAMSim2](https://github.com/umd-memsys/DRAMSim2) support
- Changed
- Flush all the CPU caches and DRAM models for every new simulation run
- Fixed
- Issue #8: useless cleaning of local variables
# Version 1.1a
- Added
- Add 16550A UART support (thanks to Marc Gauthier)
- Add a timestamp suffix to the stats file
- Changed
- Reworked the dram latency parameters to match the Sifive HiFive U540 Board
- Increased the dram dispatch queue size from 32 to 64
- Fixed
- Calculation of hardware page walk latency
- Miscalculation in page fault counters
- Issue #2: memory leaks in copy_file
- Issue #3: 'log' instead 'log2'
================================================
FILE: LICENSE.md
================================================
MIT License
Copyright (c) 2016-2017 Fabrice Bellard
Copyright (c) 2017-2019 Gaurav Kothari
Copyright (c) 2018-2019 Parikshit Sarnaik
Copyright (c) 2019 Göktürk Yüksek
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
## MARSS-RISCV: Micro-Architectural System Simulator for RISC-V
MARSS-RISCV (Micro-ARchitectural System Simulator - RISCV) is an **open-source, cycle-level single-core full-system (Linux) micro-architectural simulator** for the [RISC-V](https://riscv.org/specifications/) ISA built on top of [TinyEMU emulator](https://bellard.org/tinyemu) developed by Fabrice Bellard and utilizes the configuration code, RISC-V CPU state, physical memory, MMU, and all the devices emulated by TinyEMU.
It consists of detailed cycle-level models of a generic RISC-V In-order and Out-of-order processor with a branch prediction unit, TLBs, cache-hierarchy, and a simplistic DRAM model. It comes integrated with [DRAMSim3](https://github.com/umd-memsys/DRAMSim3) and [Ramulator](https://github.com/CMU-SAFARI/ramulator), which are cycle-accurate DRAM simulators. It can simulate the entire RISC-V software stack (from the bootloader and kernel to the user level applications, including system calls) cycle-by-cycle along with the real-time I/O without any modifications and provides simulation statistics for all the RISC-V CPU privilege modes (user, supervisor, and machine). Hence, it makes MARSS-RISCV, a full system simulation framework that simulates an entire RISC-V system-on-a-chip (SoC) cycle-by-cycle.
It is currently being developed and maintained by [CAPS](https://github.com/bucaps/) (Computer Architecture and Power-Aware Systems Research Group) at the State University of New York at Binghamton. Our simulator is currently in alpha status as we are validating the cycle accuracy using various development boards. The figure below shows a high-level overview of the MARSS-RISCV simulation framework.
<p align="center">
<img width="400" height="400" src="./figures/marss-riscv-arch.svg">
</p>
## Table of contents
- [Features](#features)
- [Getting started with the simulator running a Linux guest](#getting-started-with-the-simulator-running-a-linux-guest)
- [Running full system simulations](#running-full-system-simulations)
- [Viewing live simulation stats](#viewing-live-simulation-stats)
- [Generating simulation trace](#generating-simulation-trace)
- [Future work](#future-work)
- [Technical notes](#technical-notes)
- [Authors](#authors)
- [Acknowledgment](#acknowledgment)
- [License](#license)
## Features
- **Full system simulator** which simulates the entire system on a cycle-by-cyle basis, including the bootloader, kernel, libraries, interrupt handlers, and user-level applications
- **Configurable RISC-V CPU** with cycle-level, in-order and out-of-order processor models
- **Multiple execution units** with configurable latencies (execution units can be configured to run iteratively or in a pipelined fashion)
- **Simulates memory access delay for instructions, data and page table walk** via three direct-mapped TLBs (for code, loads and stores), two-level cache hierarchy with various allocation and miss handling policies and following DRAM memory models: A simplistic base DRAM model (which simulates a fixed delay for every main memory access), [DRAMSim3](https://github.com/umd-memsys/DRAMSim3), and [Ramulator](https://github.com/CMU-SAFARI/ramulator)
- **Branch predictor** which supports Bi-modal and 2-level adaptive (Gshare, Gselect, GAg, GAp, PAg, PAp) predictors and a Return address stack (RAS)
- **RISC-V ISA support** includes `RV32GC` and `RV64GC` (user-level ISA version `2.2`, privileged architecture version `1.10`)
- **Emulated devices** include standard platform-level interrupt controller (PLIC), core local interrupter (CLINT), real-time clock device (RTC), universal asynchronous receiver/transmitter (UART), VirtIO, NIC, block device, and 9P filesystem
- **Single JSON configuration file** to configure TinyEMU and simulator parameters, specify RISC-V BIOS and kernel individually
- **Easy to install, use and hack** with a small codebase
For more details regarding the microarchitecture of the simulated CPU, branch predictor, memory hierarchy and simulator configuration, refer to [MARSS-RISCV Docs](https://marss-riscv-docs.readthedocs.io/en/latest/)
## Getting started with the simulator running a Linux guest
### System requirements
* 32-bit or 64-bit Linux machine
* Libcurl, OpenSSL and SDL Libraries
* Standard C and C++ compiler
### Installing the dependencies
Make sure that you have all the dependencies (`ssl`, `sdl`, and `curl` libraries) installed on the system. For Debian-based (including Ubuntu) systems, the packages are: `build-essential`, `libssl-dev`, `libsdl1.2-dev`, `libcurl4-openssl-dev`.
```console
$ sudo apt-get update
$ sudo apt-get install build-essential
$ sudo apt-get install libssl-dev
$ sudo apt-get install libsdl1.2-dev
$ sudo apt-get install libcurl4-openssl-dev
```
### Compiling the simulator
First, clone the simulator repository:
```console
$ git clone https://github.com/bucaps/marss-riscv
```
Then, `cd` into the simulator source directory:
```console
$ cd marss-riscv/src/
```
Set the `CONFIG_XLEN` variable in the Makefile to the desired `XLEN` as required. Supported `XLEN` values are `32` and `64`. Default is `64`.
Then, compile the simulator using:
```console
$ make
```
### Preparing the bootloader, kernel and userland image
The simplest way to start is by using a pre-built bootloader, kernel, and userland image. The pre-built 32-bit and 64-bit RISC-V userland, bootloader, and kernel are available here: [marss-riscv-images.tar.gz](https://cs.binghamton.edu/~marss-riscv/marss-riscv-images.tar.gz)
The userland image needs to be decompressed before running the simulator:
```console
$ wget https://cs.binghamton.edu/~marss-riscv/marss-riscv-images.tar.gz
$ tar -xvzf marss-riscv-images.tar.gz
$ cd marss-riscv-images/riscv64-unknown-linux-gnu/
$ xz -d -k -T 0 riscv64.img.xz
```
When decompression finishes, jump to the marss-riscv `src` folder and launch the simulator with:
```console
$ ./marss-riscv ../configs/riscv64_inorder_soc.cfg
```
Simulation and TinyEMU SoC parameters are configured using the TinyEMU JSON configuration file provided in the [configs](/configs) directory. We have provided sample configuration files for 64-bit RISC-V single-core in-order and out-of-order SoC. The following table provides a summary of various simulation related command-line options supported by MARSS-RISCV.
| Options | Arguments | Description |
|-----------------------------|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `-rw` | - | By default, the simulator will boot in `snapshot` mode, meaning it will **not** retain the file system changes after it is shut down. In order to persist the changes, pass `-rw` command-line argument to the simulator. |
| `-simstart` | - | By default, guest boots in emulation mode, to start TinyEMU (boot kernel) in simulation mode run with `-simstart` command-line option. |
| `-sim-stats-display` | `posix-shm-name` | Dump simulation performance stats to a shared memory location `posix-shm-name`, read by sim-stats-display tool. First, open a new terminal before executing the simulator and launch `sim-stats-display` tool with `posix-shm-name` as an argument. Then start the simulator on a different terminal with `-sim-stats-display` command-line option with `posix-shm-name` as an argument. |
| `-sim-mem-model` | `base`, `dramsim3`, `ramulator` | To specify which memory model to use, run with command line option `-sim-mem-model` and specify either `base`, `dramsim3`, or `ramulator`. The default is `base`. For DRAMSim3 and Ramulator, the paths to `config file` can be specified in the TinyEMU config file. |
| `-sim-flush-mem` | - | Flush simulator memory hierarchy on every new simulation run |
| `-sim-flush-bpu` | - | Flush branch prediction unit on every new simulation run |
| `-sim-file-path` | `directory path` | Path of the directory to store stats, log, dramsim3 stats, ramulator stats, and trace files. Default is current directory `.`, the user must create the directory before starting MARSS-RISCV. |
| `-sim-file-prefix` | `prefix` | Prefix appended to stats, log, and trace file names. Default prefix used for all the simulator generated files is `sim`. (E.g., sim_<timestamp>.csv (for stats), sim.log, sim.trace) |
| `-sim-trace` | | Generate instruction commit trace in during simulation. Trace is generated in file named `<sim-file-prefix>_trace.txt` |
| `-sim-emulate-after-icount` | `icount` | Switch to emulation mode after simulating `icount` instructions every time simulation starts. |
It may also be desirable to increase the userland image (has roughly 200MB of available free space by default). More information about how to increase the size of the userland image is in the `readme.txt` file, which comes with the [images archive](https://cs.binghamton.edu/~marss-riscv/marss-riscv-images.tar.gz).
Once the guest boots, we need to initialize the environment. Normally, this should happen automatically, but due to an unresolved bug, it needs to done explicitly:
```console
# export PYTHONPATH=/usr/lib64/python2.7/site-packages/
# env-update
```
The system is ready for use and has a working GCC compiler, ssh, git, and virtual network interface. However, there is no host-to-guest routing, so it is not possible to ssh into the guest.
By default, `Ctrl-C` will not kill the simulator. The command `halt` will cleanly shutdown the guest. Alternatively, pass the `-ctrlc` command-line argument to the simulator, which will allow it to be killed using `Ctrl-C`.
After gaining access to the guest machine terminal, refer to the next section for running simulations.
## Running full system simulations
### Using checkpoints
The simulator supports two distinct custom instructions, `SIM_START()` and `SIM_STOP()`, which inform MARSS-RISCV to enable and disable simulation mode, respectively, when encountered during instruction processing. To implement these instructions, we have used two different unused registers from user mode CSR address space, `0x800`, and `0x801`. When the simulation is disabled, MARSS-RISCV runs in the emulation mode.
With these two custom instructions as checkpoints, it is possible to simulate any section in the source code. However, after inserting these markers, the source code must be recompiled inside the guest OS using the installed GCC toolchain. Alternatively, users can compile the programs on their host machine using the RISC-V toolchain and import them onto the disk image.
After the simulator executes `SIM_STOP()` instruction, simulation mode is disabled, and all the performance stats are saved in the file `sim_stats_file` as configured in the simulator configuration file. The code below shows a simple hello world program with checkpoints instructions.
```c
/* hello_world.c */
#include <stdio.h>
#define SIM_START() asm("csrs 0x800,zero")
#define SIM_STOP() asm("csrs 0x801,zero")
int main()
{
SIM_START();
printf("Hello World\n");
SIM_STOP();
return 0;
}
```
### Using the simulate script
Alternatively, users can use the simulation script (`simulate.c`) provided [here](https://github.com/bucaps/marss-riscv-utils/blob/master/simulate.c), which forks a child process. The child enters the simulation mode and execs the command. The parent process waits for the child to complete and then switches MARSS-RISCV back to emulation mode. With this script, it is possible to simulate any program without the need to modify and recompile the source code. Since the child switches to simulation mode before calling `exec()`, `exec()` also runs in the simulation. Hence, performance statistics generated at the end of the simulation will also include stats for `exec()`.
### Running benchmarks
We have provided a detailed step-by-step comprehensive tutorial [here](https://marss-riscv-docs.readthedocs.io/en/latest/sections/running-full-system.html) to run the benchmarks on the simulator. This tutorial configures MARSS-RISCV to simulate a simple 5-stage 32-bit in-order RISC-V processor and run [CoreMark](https://github.com/eembc/coremark), an industry-standard benchmark that measures the performance of central processing units (CPU) and embedded microcontrollers (MCU).
## Viewing live simulation stats
Users can view live simulation stats using the provided `sim-stats-display` tool. First, open a new terminal before executing the simulator and launch `sim-stats-display` with a shared memory name of the user's choice as an argument:
```console
$ ./sim-stats-display marss-riscv-test-shm
```
Then launch the simulator on a different terminal with `-sim-stats-display marss-riscv-test-shm` command-line option.
## Generating simulation trace
To generate instruction, commit trace of the programs running in the simulation, run MARSS-RISCV with `-sim-trace` command-line option.
Sample trace generated is shown below:
```bash
cycle=112 pc=0x6aaaadf8 insn=0x85be863a c.mv a2,a4 mode=PRV_U
cycle=113 pc=0x6aaaadfa insn=0x250385be c.mv a1,a5 mode=PRV_U
cycle=115 pc=0x6aaaadfc insn=0xfa842503 lw a0,s0,-88 mode=PRV_U
```
## Technical notes
This section refers to technical notes for [TinyEMU](https://bellard.org/tinyemu). For simulator specific technical details refer: [MARSS-RISCV Docs](https://marss-riscv-docs.readthedocs.io/en/latest/)
### Floating point emulation
The floating-point emulation is bit-exact and supports all the specified instructions for 32-bit and 64-bit floating-point numbers. It uses the new SoftFP library.
### HTIF console
The standard HTIF console uses registers at variable addresses, which are deduced by loading specific ELF symbols. TinyEMU does not rely on an ELF loader, so it is much simpler to use registers at fixed addresses (0x40008000). A small modification was made in the "riscv-pk" boot loader to support it. The HTIF console is only used to display boot messages and to power off the virtual system. The OS should use the VirtIO console.
### Network usage
The easiest way is to use the "user" mode network driver. No specific configuration is necessary. TinyEMU also supports a "tap" network driver to redirect the network traffic from a VirtIO network adapter. You can look at the ``netinit.sh`` script to create the tap network interface and to redirect the virtual traffic to the Internet through a NAT. The exact configuration may depend on the Linux distribution and local firewall configuration. The TinyEMU configuration file must include:
``eth0: { driver: "tap", ifname: "tap0" }``
Furthermore, configure the network in the guest system with:
```console
$ ifconfig eth0 192.168.3.2
$ route add -net 0.0.0.0 gw 192.168.3.1 eth0
```
### Network filesystem
TinyEMU supports the VirtIO 9P filesystem to access local or remote filesystems. For remote filesystems, it makes HTTP requests to download the files. The protocol is compatible with the vfsync utility. In the ``mount`` command, ``/dev/rootN`` must be used as a device name where ``N`` is the index of the filesystem. When ``N=0``, it is omitted.
The build_filelist tool builds the file list from a root directory. A simple web server is enough to serve the files. The ``.preload`` file gives a list of files to preload when opening a given file.
### Network block device
TinyEMU supports an HTTP block device. The disk image is split into small files. Use the ``splitimg`` utility to generate images. The URL of the JSON blk.txt file must be provided as a disk image filename.
## Authors
* Copyright (c) 2017-2020 Gaurav Kothari {gkothar1@binghamton.edu}
* Copyright (c) 2018-2019 Parikshit Sarnaik {psarnai1@binghamton.edu}
TinyEMU:
* Copyright (c) 2016-2019 Fabrice Bellard
## Acknowledgment
* This work was supported in part by DARPA through an award from the SSITH program.
* Thanks to Fabrice Bellard for the development of TinyEMU.
* We want to thank Gokturk Yuksek, Ravi Theja Gollapudi, and Kanad Ghose for assistance with the internal details of TinyEMU and the development of the MARSS-RISCV simulator.
* Thanks to all the people working on the RISC-V project.
* For DRAMSim3, refer [here](https://github.com/umd-memsys/DRAMSim3).
* For Ramulator, refer [here](https://github.com/CMU-SAFARI/ramulator).
## License
* This project is licensed under the MIT License - refer to the [LICENSE.md](LICENSE.md) file for details.
* The SLIRP library has a two clause BSD license.
* DRAMSim3 has a MIT License.
* Ramulator has a MIT License.
================================================
FILE: configs/riscv64_inorder_soc.cfg
================================================
/* VM configuration file */
{
version: 1,
machine: "riscv64", /* riscv32, riscv64 */
memory_size: 2048, /* MB */
bios: "riscv64-unknown-linux-gnu/bbl64.bin",
kernel: "riscv64-unknown-linux-gnu/kernel-riscv64.bin",
cmdline: "console=hvc0 root=/dev/vda rw",
drive0: { file: "riscv64-unknown-linux-gnu/riscv64.img" },
eth0: { driver: "user" },
core: {
name: "64-bit inorder riscv CPU",
type: "incore", /* incore, oocore */
cpu_freq_mhz: 1000,
rtc_freq_mhz: 10,
incore : {
num_cpu_stages: 5, /* 5, 6 */
},
oocore: {
iq_size: 16,
iq_issue_ports: 3,
rob_size: 64,
rob_commit_ports:4,
lsq_size: 16,
},
/* Note: Latencies for functional units, caches and memory are specified in CPU cycles */
functional_units: {
num_alu_stages: 1,
alu_stage_latency: "1",
num_mul_stages: 1,
mul_stage_latency: "4",
num_div_stages: 1,
div_stage_latency: "67",
/* Note: This will create a pipelined FP-FMA unit with 4 stages with a
* latency of 1 CPU cycle(s) per stage */
num_fpu_fma_stages: 4,
fpu_fma_stage_latency: "1,1,1,1",
/* Note: FP-ALU is non-pipelined */
fpu_alu_stage_latency: {
fadd: 2,
fsub: 2,
fmul: 2,
fdiv: 8,
fsqrt: 8,
fsgnj: 2,
fmin: 4,
fmax: 4,
feq: 2,
flt: 2,
fle: 2,
cvt: 2,
fcvt: 2,
fmv: 2,
fclass: 1,
},
/* Latency for RISC-V SYSTEM opcode instructions (includes CSR and privileged instructions)*/
system_insn_latency: 3,
},
bpu: {
enable: "true", /* true, false */
flush_on_context_switch: "false", /* true, false */
btb: {
size: 32,
ways: 2,
eviction_policy: "lru", /* lru, random */
},
bpu_type: "bimodal", /* bimodal, adaptive */
bimodal: {
bht_size: 256,
},
adaptive: {
ght_size: 1,
pht_size: 1,
history_bits: 2,
aliasing_func_type: "xor", /* xor, and, none */
/* Given config for adaptive predictor will create a Gshare predictor:
* 1) global history table consisting of one entry, entry includes a 2-bit history register
* 2) pattern history table consisting of one entry, entry includes an array of 4 saturating counters
* 3) value of history register will be `xor` ed with branch PC to index into the array of saturating counters
*/
},
ras_size: 6, /* value 0 disables RAS */
},
caches: {
enable_l1_caches: "true", /* true, false */
allocate_on_write_miss: "true", /* true, false */
write_policy: "writeback", /* writeback, writethrough */
line_size: 64, /* Bytes */
icache: {
size: 32, /* KB */
ways: 4,
latency: 1,
eviction: "lru", /* lru, random */
},
dcache: {
size: 32, /* KB */
ways: 8,
latency: 1,
eviction: "lru", /* lru, random */
},
l2_shared_cache: {
enable: "true",
size: 256, /* KB */
ways: 16,
latency: 5,
eviction: "lru", /* lru, random */
},
},
},
memory: {
tlb_size: 32,
/* Memory controller burst-length in bytes */
/* Note: This is automatically set to cache line size if caches are enabled */
burst_length: 64, /* Bytes */
base_dram_model: {
mem_access_latency: 50,
},
dramsim3: {
config_file: "DRAMsim3/configs/DDR4_4Gb_x16_2400.ini",
},
ramulator: {
config_file: "ramulator/configs/DDR4-config.cfg",
},
},
}
================================================
FILE: configs/riscv64_outoforder_soc.cfg
================================================
/* VM configuration file */
{
version: 1,
machine: "riscv64", /* riscv32, riscv64 */
memory_size: 2048, /* MB */
bios: "riscv64-unknown-linux-gnu/bbl64.bin",
kernel: "riscv64-unknown-linux-gnu/kernel-riscv64.bin",
cmdline: "console=hvc0 root=/dev/vda rw",
drive0: { file: "riscv64-unknown-linux-gnu/riscv64.img" },
eth0: { driver: "user" },
core: {
name: "64-bit out-of-order riscv CPU",
type: "oocore", /* incore, oocore */
cpu_freq_mhz: 1000,
rtc_freq_mhz: 10,
incore : {
num_cpu_stages: 5, /* 5, 6 */
},
oocore: {
iq_size: 16,
iq_issue_ports: 3,
rob_size: 64,
rob_commit_ports:4,
lsq_size: 16,
},
/* Note: Latencies for functional units, caches and memory are specified in CPU cycles */
functional_units: {
num_alu_stages: 1,
alu_stage_latency: "1",
num_mul_stages: 1,
mul_stage_latency: "4",
num_div_stages: 1,
div_stage_latency: "67",
/* Note: This will create a pipelined FP-FMA unit with 4 stages with a
* latency of 1 CPU cycle(s) per stage */
num_fpu_fma_stages: 4,
fpu_fma_stage_latency: "1,1,1,1",
/* Note: FP-ALU is non-pipelined */
fpu_alu_stage_latency: {
fadd: 2,
fsub: 2,
fmul: 2,
fdiv: 8,
fsqrt: 8,
fsgnj: 2,
fmin: 4,
fmax: 4,
feq: 2,
flt: 2,
fle: 2,
cvt: 2,
fcvt: 2,
fmv: 2,
fclass: 1,
},
/* Latency for RISC-V SYSTEM opcode instructions (includes CSR and privileged instructions)*/
system_insn_latency: 3,
},
bpu: {
enable: "true", /* true, false */
flush_on_context_switch: "false", /* true, false */
btb: {
size: 32,
ways: 2,
eviction_policy: "lru", /* lru, random */
},
bpu_type: "bimodal", /* bimodal, adaptive */
bimodal: {
bht_size: 256,
},
adaptive: {
ght_size: 1,
pht_size: 1,
history_bits: 2,
aliasing_func_type: "xor", /* xor, and, none */
/* Given config for adaptive predictor will create a Gshare predictor:
* 1) global history table consisting of one entry, entry includes a 2-bit history register
* 2) pattern history table consisting of one entry, entry includes an array of 4 saturating counters
* 3) value of history register will be `xor` ed with branch PC to index into the array of saturating counters
*/
},
ras_size: 6, /* value 0 disables RAS */
},
caches: {
enable_l1_caches: "true", /* true, false */
allocate_on_write_miss: "true", /* true, false */
write_policy: "writeback", /* writeback, writethrough */
line_size: 64, /* Bytes */
icache: {
size: 32, /* KB */
ways: 4,
latency: 1,
eviction: "lru", /* lru, random */
},
dcache: {
size: 32, /* KB */
ways: 8,
latency: 1,
eviction: "lru", /* lru, random */
},
l2_shared_cache: {
enable: "true",
size: 256, /* KB */
ways: 16,
latency: 5,
eviction: "lru", /* lru, random */
},
},
},
memory: {
tlb_size: 32,
/* Memory controller burst-length in bytes */
/* Note: This is automatically set to cache line size if caches are enabled */
burst_length: 64, /* Bytes */
base_dram_model: {
mem_access_latency: 50,
},
dramsim3: {
config_file: "DRAMsim3/configs/DDR4_4Gb_x16_2400.ini",
},
ramulator: {
config_file: "ramulator/configs/DDR4-config.cfg",
},
},
}
================================================
FILE: src/DRAMsim3/.clang-format
================================================
---
Language: Cpp
# BasedOnStyle: Google
AccessModifierOffset: -1
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Left
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: true
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 80
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: true
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^<ext/.*\.h>'
Priority: 2
- Regex: '^<.*\.h>'
Priority: 1
- Regex: '^<.*'
Priority: 2
- Regex: '.*'
Priority: 3
IncludeIsMainRegex: '([-_](test|unittest))?$'
IndentCaseLabels: true
IndentPPDirectives: None
IndentWidth: 4
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: false
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PointerAlignment: Left
RawStringFormats:
- Delimiter: pb
Language: TextProto
BasedOnStyle: google
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Auto
TabWidth: 8
UseTab: Never
...
================================================
FILE: src/DRAMsim3/.gitignore
================================================
# project files
build/
debug_build/
data/
ext/SuperLU_MT_3.1/
obj
dramsim3
dramsim3test
dramsim3main
*.log
release
.idea
*.pyc
*.vh
.vs/
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
# IDEs / Editors
.vscode/
================================================
FILE: src/DRAMsim3/.gitmodules
================================================
[submodule "ext/SuperLU_MT_3.1"]
path = ext/SuperLU_MT_3.1
url = https://github.com/umd-memsys/SuperLU_MT_3.1.git
ignore = dirty
================================================
FILE: src/DRAMsim3/.travis.yml
================================================
dist: trusty
#sudo: required
sudo: false
language: cpp
warnings_are_errors: true
compiler:
# - gcc
- clang
#addons:
# apt:
# packages:
# - gcc-4.9
# - clang-3.5
# - cmake
script:
- mkdir build
- cd build
- cmake ..
- make -j4
================================================
FILE: src/DRAMsim3/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.0.0)
project(dramsim3)
set(default_build_type "Release")
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
"Debug" "Release" "MinSizeRel" "RelWithDebInfo")
endif()
add_library(inih INTERFACE)
target_include_directories(inih INTERFACE ext/headers)
add_library(format INTERFACE)
target_include_directories(format INTERFACE ext/fmt/include)
target_compile_definitions(format INTERFACE FMT_HEADER_ONLY=1)
# argparsing library, only used in main program not the library
add_library(args INTERFACE)
target_include_directories(args INTERFACE ext/headers)
add_library(json INTERFACE)
target_include_directories(json INTERFACE ext/headers)
# Main DRAMSim Lib
add_library(dramsim3 SHARED
src/bankstate.cc
src/channel_state.cc
src/command_queue.cc
src/common.cc
src/configuration.cc
src/controller.cc
src/dram_system.cc
src/hmc.cc
src/refresh.cc
src/simple_stats.cc
src/timing.cc
src/memory_system.cc
)
if (THERMAL)
# dependency check
# sudo apt-get install libatlas-base-dev on ubuntu
find_package(BLAS REQUIRED)
find_package(OpenMP REQUIRED)
# YOU need to build superlu on your own. Do the following:
# git submodule update --init
# cd ext/SuperLU_MT_3.1 && make lib
find_library(SUPERLU
NAME superlu_mt_OPENMP libsuperlu_mt_OPENMP
HINTS ${PROJECT_SOURCE_DIR}/ext/SuperLU_MT_3.1/lib/
)
target_link_libraries(dramsim3
PRIVATE ${SUPERLU} f77blas atlas m ${OpenMP_C_FLAGS}
)
target_sources(dramsim3
PRIVATE src/thermal.cc src/sp_ienv.c src/thermal_solver.c
)
target_compile_options(dramsim3 PRIVATE -DTHERMAL -D_LONGINT -DAdd_ ${OpenMP_C_FLAGS})
add_executable(thermalreplay src/thermal_replay.cc)
target_link_libraries(thermalreplay dramsim3 inih)
target_compile_options(thermalreplay PRIVATE -DTHERMAL -D_LONGINT -DAdd_ ${OpenMP_C_FLAGS})
endif (THERMAL)
if (CMD_TRACE)
target_compile_options(dramsim3 PRIVATE -DCMD_TRACE)
endif (CMD_TRACE)
if (ADDR_TRACE)
target_compile_options(dramsim3 PRIVATE -DADDR_TRACE)
endif (ADDR_TRACE)
target_include_directories(dramsim3 INTERFACE src)
target_compile_options(dramsim3 PRIVATE -Wall)
target_link_libraries(dramsim3 PRIVATE inih format)
set_target_properties(dramsim3 PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}
CXX_STANDARD 11
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS NO
)
# trace CPU, .etc
add_executable(dramsim3main src/main.cc src/cpu.cc)
target_link_libraries(dramsim3main PRIVATE dramsim3 args)
target_compile_options(dramsim3main PRIVATE)
set_target_properties(dramsim3main PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS NO
)
# Unit testing
add_library(Catch INTERFACE)
target_include_directories(Catch INTERFACE ext/headers)
add_executable(dramsim3test EXCLUDE_FROM_ALL
tests/test_config.cc
tests/test_dramsys.cc
tests/test_hmcsys.cc # IDK somehow this can literally crush your computer
)
target_link_libraries(dramsim3test Catch dramsim3)
target_include_directories(dramsim3test PRIVATE src/)
# We have to use this custome command because there's a bug in cmake
# that if you do `make test` it doesn't build your updated test files
# so we're stucking with `make dramsim3test` for now
add_custom_command(
TARGET dramsim3test POST_BUILD
COMMAND dramsim3test
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
DEPENDS dramsim3test dramsim3
)
================================================
FILE: src/DRAMsim3/LICENSE
================================================
Copyright (c) 2019, University of Maryland Memory-Systems Research
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: src/DRAMsim3/Makefile
================================================
# ONLY use this makefile if you do NOT have a cmake 3.0+ version
CC=gcc
CXX=g++
FMT_LIB_DIR=ext/fmt/include
INI_LIB_DIR=ext/headers
JSON_LIB_DIR=ext/headers
ARGS_LIB_DIR=ext/headers
INC=-Isrc/ -I$(FMT_LIB_DIR) -I$(INI_LIB_DIR) -I$(ARGS_LIB_DIR) -I$(JSON_LIB_DIR)
CXXFLAGS=-Wall -O2 -fPIC -std=c++11 $(INC) -DFMT_HEADER_ONLY=1
LIB_NAME=libdramsim3.so
EXE_NAME=dramsim3main.out
STATIC_LIB_NAME=libdramsim3.a
SRCS = src/bankstate.cc src/channel_state.cc src/command_queue.cc src/common.cc \
src/configuration.cc src/controller.cc src/dram_system.cc src/hmc.cc \
src/memory_system.cc src/refresh.cc src/simple_stats.cc src/timing.cc
EXE_SRCS = src/cpu.cc src/main.cc
OBJECTS = $(addsuffix .o, $(basename $(SRCS)))
EXE_OBJS = $(addsuffix .o, $(basename $(EXE_SRCS)))
EXE_OBJS := $(EXE_OBJS) $(OBJECTS)
all: $(LIB_NAME) $(EXE_NAME)
$(EXE_NAME): $(EXE_OBJS)
$(CXX) $(CXXFLAGS) -o $@ $^
$(LIB_NAME): $(OBJECTS)
$(CXX) -g -shared -Wl,-soname,$@ -o $@ $^
$(STATIC_LIB_NAME): $(OBJECTS)
$(AR) rcs $@ $(OBJECTS)
%.o : %.cc
$(CXX) $(CXXFLAGS) -o $@ -c $<
%.o : %.c
$(CC) -fPIC -O2 -o $@ -c $<
clean:
-rm -f $(EXE_OBJS) $(LIB_NAME) $(EXE_NAME)
================================================
FILE: src/DRAMsim3/README.md
================================================
[](https://travis-ci.com/umd-memsys/DRAMsim3)
# About DRAMsim3
DRAMsim3 models the timing paramaters and memory controller behavior for several DRAM protocols such as DDR3, DDR4, LPDDR3, LPDDR4, GDDR5, GDDR6, HBM, HMC, STT-MRAM. It is implemented in C++ as an objected oriented model that includes a parameterized DRAM bank model, DRAM controllers, command queues and system-level interfaces to interact with a CPU simulator (GEM5, ZSim) or trace workloads. It is designed to be accurate, portable and parallel.
If you use this simulator in your work, please consider cite:
[1] S. Li, Z. Yang, D. Reddy, A. Srivastava and B. Jacob, "DRAMsim3: a Cycle-accurate, Thermal-Capable DRAM Simulator," in IEEE Computer Architecture Letters. [Link](https://ieeexplore.ieee.org/document/8999595)
See [Related Work](#related-work) for more work done with this simulator.
## Building and running the simulator
This simulator by default uses a CMake based build system.
The advantage in using a CMake based build system is portability and dependency management.
We require CMake 3.0+ to build this simulator.
If `cmake-3.0` is not available,
we also supply a Makefile to build the most basic version of the simulator.
### Building
Doing out of source builds with CMake is recommended to avoid the build files cluttering the main directory.
```bash
# cmake out of source build
mkdir build
cd build
cmake ..
# Build dramsim3 library and executables
make -j4
# Alternatively, build with thermal module enabled
cmake .. -DTHERMAL=1
```
The build process creates `dramsim3main` and executables in the `build` directory.
By default, it also creates `libdramsim3.so` shared library in the project root directory.
### Running
```bash
# help
./build/dramsim3main -h
# Running random stream with a config file
./build/dramsim3main configs/DDR4_8Gb_x8_3200.ini --stream random -c 100000
# Running a trace file
./build/dramsim3main configs/DDR4_8Gb_x8_3200.ini -c 100000 -t sample_trace.txt
# Running with gem5
--mem-type=dramsim3 --dramsim3-ini=configs/DDR4_4Gb_x4_2133.ini
```
The output can be directed to another directory by `-o` option
or can be configured in the config file.
You can control the verbosity in the config file as well.
### Output Visualization
`scripts/plot_stats.py` can visualize some of the output (requires `matplotlib`):
```bash
# generate histograms from overall output
python3 scripts/plot_stats dramsim3.json
# or
# generate time series for a variety stats from epoch outputs
python3 scripts/plot_stats dramsim3epoch.json
```
Currently stats from all channels are squashed together for cleaner plotting.
### Integration with other simulators
**Gem5** integration: works with a forked Gem5 version, see https://github.com/umd-memsys/gem5 at `dramsim3` branch for reference.
**SST** integration: see http://git.ece.umd.edu/shangli/sst-elements/tree/dramsim3 for reference. We will try to merge to official SST repo.
**ZSim** integration: see http://git.ece.umd.edu/shangli/zsim/tree/master for reference.
## Simulator Design
### Code Structure
```
├── configs # Configs of various protocols that describe timing constraints and power consumption.
├── ext #
├── scripts # Tools and utilities
├── src # DRAMsim3 source files
├── tests # Tests of each model, includes a short example trace
├── CMakeLists.txt
├── Makefile
├── LICENSE
└── README.md
├── src
bankstate.cc: Records and manages DRAM bank timings and states which is modeled as a state machine.
channelstate.cc: Records and manages channel timings and states.
command_queue.cc: Maintains per-bank or per-rank FIFO queueing structures, determine which commands in the queues can be issued in this cycle.
configuration.cc: Initiates, manages system and DRAM parameters, including protocol, DRAM timings, address mapping policy and power parameters.
controller.cc: Maintains the per-channel controller, which manages a queue of pending memory transactions and issues corresponding DRAM commands,
follows FR-FCFS policy.
cpu.cc: Implements 3 types of simple CPU:
1. Random, can handle random CPU requests at full speed, the entire parallelism of DRAM protocol can be exploited without limits from address mapping and scheduling pocilies.
2. Stream, provides a streaming prototype that is able to provide enough buffer hits.
3. Trace-based, consumes traces of workloads, feed the fetched transactions into the memory system.
dram_system.cc: Initiates JEDEC or ideal DRAM system, registers the supplied callback function to let the front end driver know that the request is finished.
hmc.cc: Implements HMC system and interface, HMC requests are translates to DRAM requests here and a crossbar interconnect between the high-speed links and the memory controllers is modeled.
main.cc: Handles the main program loop that reads in simulation arguments, DRAM configurations and tick cycle forward.
memory_system.cc: A wrapper of dram_system and hmc.
refresh.cc: Raises refresh request based on per-rank refresh or per-bank refresh.
timing.cc: Initiate timing constraints.
```
## Experiments
### Verilog Validation
First we generate a DRAM command trace.
There is a `CMD_TRACE` macro and by default it's disabled.
Use `cmake .. -DCMD_TRACE=1` to enable the command trace output build and then
whenever a simulation is performed the command trace file will be generated.
Next, `scripts/validation.py` helps generate a Verilog workbench for Micron's Verilog model
from the command trace file.
Currently DDR3, DDR4, and LPDDR configs are supported by this script.
Run
```bash
./script/validataion.py DDR4.ini cmd.trace
```
To generage Verilog workbench.
Our workbench format is compatible with ModelSim Verilog simulator,
other Verilog simulators may require a slightly different format.
## Related Work
[1] Li, S., Yang, Z., Reddy D., Srivastava, A. and Jacob, B., (2020) DRAMsim3: a Cycle-accurate, Thermal-Capable DRAM Simulator, IEEE Computer Architecture Letters.
[2] Jagasivamani, M., Walden, C., Singh, D., Kang, L., Li, S., Asnaashari, M., ... & Yeung, D. (2019). Analyzing the Monolithic Integration of a ReRAM-Based Main Memory Into a CPU's Die. IEEE Micro, 39(6), 64-72.
[3] Li, S., Reddy, D., & Jacob, B. (2018, October). A performance & power comparison of modern high-speed DRAM architectures. In Proceedings of the International Symposium on Memory Systems (pp. 341-353).
[4] Li, S., Verdejo, R. S., Radojković, P., & Jacob, B. (2019, September). Rethinking cycle accurate DRAM simulation. In Proceedings of the International Symposium on Memory Systems (pp. 184-191).
[5] Li, S., & Jacob, B. (2019, September). Statistical DRAM modeling. In Proceedings of the International Symposium on Memory Systems (pp. 521-530).
[6] Li, S. (2019). Scalable and Accurate Memory System Simulation (Doctoral dissertation).
================================================
FILE: src/DRAMsim3/configs/DDR3_1Gb_x8_1333.ini
================================================
[dram_structure]
protocol = DDR3
bankgroups = 1
banks_per_group = 8
rows = 16384
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 1.5
AL = 0
CL = 10
CWL = 7
tRCD = 10
tRP = 10
tRAS = 24
tRFC = 74
tREFI = 5200
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tWTR_S = 5
tFAW = 20
tWR = 10
tCCD_S = 4
tRTP = 5
tCKE = 4
tCKESR = 1
tXS = 81
tXP = 5
tRTRS = 1
[power]
VDD = 1.35
IDD0 = 33
IDD2P = 12
IDD2N = 17
IDD3P = 14
IDD3N = 23
IDD4W = 77
IDD4R = 72
IDD5AB = 155
IDD6x = 12
[system]
channel_size = 2048
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
trans_queue_size = 32
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
[other]
epoch_period = 666666
output_level = 1
[thermal]
loc_mapping = 30,30,30,29:27,26:13,12:3
power_epoch_period = 10000; power epoch period (# cycle)
chip_dim_x = 0.008; chip size in x dimension [m]
chip_dim_y = 0.008; chip size in y dimension [m]
amb_temp = 40; The ambient temperature in [C]
mat_dim_x = 512;
mat_dim_y = 512;
bank_order = 1; 0: x direction first, 1: y direction first
================================================
FILE: src/DRAMsim3/configs/DDR3_4Gb_x16_1600.ini
================================================
[dram_structure]
protocol = DDR3
bankgroups = 1
banks_per_group = 8
rows = 32768
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 1.25
AL = 0
CL = 11
CWL = 8
tRCD = 11
tRP = 11
tRAS = 28
tRFC = 208
tRFC2 = 208
tRFC4 = 208
REFI = 6240
tRPRE = 0
tWPRE = 0
tRRD_S = 5
tRRD_L = 5
tWTR_S = 6
tWTR_L = 6
tFAW = 32
tWR = 12
tWR2 = 12
tRTP = 6
tCCD_S = 4
tCCD_L = 4
tCKE = 4
tCKESR = 5
tXS = 216
tXP = 5
tRTRS = 1
[power]
VDD = 1.35
IDD0 = 66
IPP0 = 0.0
IDD2P = 18
IDD2N = 32
IDD3P = 38
IDD3N = 47
IDD4W = 171
IDD4R = 235
IDD5AB = 235
IDD6x = 20
[system]
channel_size = 4096
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 800000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR3_4Gb_x16_1866.ini
================================================
[dram_structure]
protocol = DDR3
bankgroups = 1
banks_per_group = 8
rows = 32768
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 1.07
AL = 0
CL = 13
CWL = 9
tRCD = 13
tRP = 13
tRAS = 32
tRFC = 243
tRFC2 = 243
tRFC4 = 243
REFI = 7290
tRPRE = 0
tWPRE = 0
tRRD_S = 6
tRRD_L = 6
tWTR_S = 7
tWTR_L = 7
tFAW = 33
tWR = 15
tWR2 = 15
tRTP = 7
tCCD_S = 4
tCCD_L = 4
tCKE = 5
tCKESR = 6
tXS = 253
tXP = 6
tRTRS = 1
[power]
VDD = 1.35
IDD0 = 73
IPP0 = 0.0
IDD2P = 18
IDD2N = 35
IDD3P = 41
IDD3N = 49
IDD4W = 190
IDD4R = 252
IDD5AB = 242
IDD6x = 20
[system]
channel_size = 4096
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 934579
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR3_4Gb_x4_1600.ini
================================================
[dram_structure]
protocol = DDR3
bankgroups = 1
banks_per_group = 8
rows = 65536
columns = 2048
device_width = 4
BL = 8
[timing]
tCK = 1.25
AL = 0
CL = 11
CWL = 8
tRCD = 11
tRP = 11
tRAS = 28
tRFC = 208
tRFC2 = 208
tRFC4 = 208
REFI = 6240
tRPRE = 0
tWPRE = 0
tRRD_S = 5
tRRD_L = 5
tWTR_S = 6
tWTR_L = 6
tFAW = 24
tWR = 12
tWR2 = 12
tRTP = 6
tCCD_S = 4
tCCD_L = 4
tCKE = 4
tCKESR = 5
tXS = 216
tXP = 5
tRTRS = 1
[power]
VDD = 1.35
IDD0 = 55
IPP0 = 0.0
IDD2P = 18
IDD2N = 32
IDD3P = 38
IDD3N = 38
IDD4W = 118
IDD4R = 147
IDD5AB = 235
IDD6x = 20
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 800000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR3_4Gb_x4_1866.ini
================================================
[dram_structure]
protocol = DDR3
bankgroups = 1
banks_per_group = 8
rows = 65536
columns = 2048
device_width = 4
BL = 8
[timing]
tCK = 1.07
AL = 0
CL = 13
CWL = 9
tRCD = 13
tRP = 13
tRAS = 32
tRFC = 243
tRFC2 = 243
tRFC4 = 243
REFI = 7290
tRPRE = 0
tWPRE = 0
tRRD_S = 5
tRRD_L = 5
tWTR_S = 7
tWTR_L = 7
tFAW = 26
tWR = 15
tWR2 = 15
tRTP = 6
tCCD_S = 4
tCCD_L = 4
tCKE = 5
tCKESR = 6
tXS = 253
tXP = 6
tRTRS = 1
[power]
VDD = 1.35
IDD0 = 62
IPP0 = 0.0
IDD2P = 18
IDD2N = 35
IDD3P = 41
IDD3N = 41
IDD4W = 133
IDD4R = 164
IDD5AB = 242
IDD6x = 20
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 934579
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR3_4Gb_x8_1600.ini
================================================
[dram_structure]
protocol = DDR3
bankgroups = 1
banks_per_group = 8
rows = 65536
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 1.25
AL = 0
CL = 11
CWL = 8
tRCD = 11
tRP = 11
tRAS = 28
tRFC = 208
tRFC2 = 208
tRFC4 = 208
REFI = 6240
tRPRE = 0
tWPRE = 0
tRRD_S = 5
tRRD_L = 5
tWTR_S = 6
tWTR_L = 6
tFAW = 24
tWR = 12
tWR2 = 12
tRTP = 6
tCCD_S = 4
tCCD_L = 4
tCKE = 4
tCKESR = 5
tXS = 216
tXP = 5
tRTRS = 1
[power]
VDD = 1.35
IDD0 = 55
IPP0 = 0.0
IDD2P = 18
IDD2N = 32
IDD3P = 38
IDD3N = 38
IDD4W = 125
IDD4R = 157
IDD5AB = 235
IDD6x = 20
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 800000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR3_4Gb_x8_1866.ini
================================================
[dram_structure]
protocol = DDR3
bankgroups = 1
banks_per_group = 8
rows = 65536
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 1.07
AL = 0
CL = 13
CWL = 9
tRCD = 13
tRP = 13
tRAS = 32
tRFC = 243
tRFC2 = 243
tRFC4 = 243
REFI = 7290
tRPRE = 0
tWPRE = 0
tRRD_S = 5
tRRD_L = 5
tWTR_S = 7
tWTR_L = 7
tFAW = 26
tWR = 15
tWR2 = 15
tRTP = 6
tCCD_S = 4
tCCD_L = 4
tCKE = 5
tCKESR = 6
tXS = 253
tXP = 6
tRTRS = 1
[power]
VDD = 1.35
IDD0 = 62
IPP0 = 0.0
IDD2P = 18
IDD2N = 35
IDD3P = 41
IDD3N = 41
IDD4W = 141
IDD4R = 174
IDD5AB = 242
IDD6x = 20
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 934579
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR3_8Gb_x16_1600.ini
================================================
[dram_structure]
protocol = DDR3
bankgroups = 1
banks_per_group = 8
rows = 65536
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 1.25
AL = 0
CL = 11
CWL = 8
tRCD = 11
tRP = 11
tRAS = 28
tRFC = 280
tRFC2 = 280
tRFC4 = 280
REFI = 6240
tRPRE = 0
tWPRE = 0
tRRD_S = 6
tRRD_L = 6
tWTR_S = 6
tWTR_L = 6
tFAW = 32
tWR = 12
tWR2 = 12
tRTP = 6
tCCD_S = 4
tCCD_L = 4
tCKE = 4
tCKESR = 5
tXS = 288
tXP = 5
tRTRS = 1
[power]
VDD = 1.35
IDD0 = 67
IPP0 = 0.0
IDD2P = 11
IDD2N = 36
IDD3P = 36
IDD3N = 51
IDD4W = 185
IDD4R = 185
IDD5AB = 270
IDD6x = 24
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 800000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR3_8Gb_x16_1866.ini
================================================
[dram_structure]
protocol = DDR3
bankgroups = 1
banks_per_group = 8
rows = 65536
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 1.07
AL = 0
CL = 13
CWL = 9
tRCD = 13
tRP = 13
tRAS = 32
tRFC = 328
tRFC2 = 328
tRFC4 = 328
REFI = 7290
tRPRE = 0
tWPRE = 0
tRRD_S = 6
tRRD_L = 6
tWTR_S = 7
tWTR_L = 7
tFAW = 33
tWR = 15
tWR2 = 15
tRTP = 7
tCCD_S = 4
tCCD_L = 4
tCKE = 5
tCKESR = 6
tXS = 338
tXP = 6
tRTRS = 1
[power]
VDD = 1.35
IDD0 = 69
IPP0 = 0.0
IDD2P = 11
IDD2N = 38
IDD3P = 38
IDD3N = 53
IDD4W = 195
IDD4R = 195
IDD5AB = 275
IDD6x = 24
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 934579
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR3_8Gb_x4_1600.ini
================================================
[dram_structure]
protocol = DDR3
bankgroups = 1
banks_per_group = 8
rows = 65536
columns = 4096
device_width = 4
BL = 8
[timing]
tCK = 1.25
AL = 0
CL = 11
CWL = 8
tRCD = 11
tRP = 11
tRAS = 28
tRFC = 280
tRFC2 = 280
tRFC4 = 280
REFI = 6240
tRPRE = 0
tWPRE = 0
tRRD_S = 6
tRRD_L = 6
tWTR_S = 6
tWTR_L = 6
tFAW = 32
tWR = 12
tWR2 = 12
tRTP = 6
tCCD_S = 4
tCCD_L = 4
tCKE = 4
tCKESR = 5
tXS = 288
tXP = 5
tRTRS = 1
[power]
VDD = 1.35
IDD0 = 67
IPP0 = 0.0
IDD2P = 11
IDD2N = 36
IDD3P = 36
IDD3N = 51
IDD4W = 125
IDD4R = 125
IDD5AB = 245
IDD6x = 24
[system]
channel_size = 32768
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 800000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR3_8Gb_x4_1866.ini
================================================
[dram_structure]
protocol = DDR3
bankgroups = 1
banks_per_group = 8
rows = 65536
columns = 4096
device_width = 4
BL = 8
[timing]
tCK = 1.07
AL = 0
CL = 13
CWL = 9
tRCD = 13
tRP = 13
tRAS = 32
tRFC = 328
tRFC2 = 328
tRFC4 = 328
REFI = 7290
tRPRE = 0
tWPRE = 0
tRRD_S = 6
tRRD_L = 6
tWTR_S = 7
tWTR_L = 7
tFAW = 33
tWR = 15
tWR2 = 15
tRTP = 7
tCCD_S = 4
tCCD_L = 4
tCKE = 5
tCKESR = 6
tXS = 338
tXP = 6
tRTRS = 1
[power]
VDD = 1.35
IDD0 = 69
IPP0 = 0.0
IDD2P = 11
IDD2N = 38
IDD3P = 38
IDD3N = 53
IDD4W = 135
IDD4R = 135
IDD5AB = 250
IDD6x = 24
[system]
channel_size = 32768
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 934579
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR3_8Gb_x8_1600.ini
================================================
[dram_structure]
protocol = DDR3
bankgroups = 1
banks_per_group = 8
rows = 65536
columns = 2048
device_width = 8
BL = 8
[timing]
tCK = 1.25
AL = 0
CL = 11
CWL = 8
tRCD = 11
tRP = 11
tRAS = 28
tRFC = 280
tRFC2 = 280
tRFC4 = 280
REFI = 6240
tRPRE = 0
tWPRE = 0
tRRD_S = 6
tRRD_L = 6
tWTR_S = 6
tWTR_L = 6
tFAW = 32
tWR = 12
tWR2 = 12
tRTP = 6
tCCD_S = 4
tCCD_L = 4
tCKE = 4
tCKESR = 5
tXS = 288
tXP = 5
tRTRS = 1
[power]
VDD = 1.35
IDD0 = 67
IPP0 = 0.0
IDD2P = 11
IDD2N = 36
IDD3P = 36
IDD3N = 51
IDD4W = 125
IDD4R = 125
IDD5AB = 245
IDD6x = 24
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 800000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR3_8Gb_x8_1866.ini
================================================
[dram_structure]
protocol = DDR3
bankgroups = 1
banks_per_group = 8
rows = 65536
columns = 2048
device_width = 8
BL = 8
[timing]
tCK = 1.07
AL = 0
CL = 13
CWL = 9
tRCD = 13
tRP = 13
tRAS = 32
tRFC = 328
tRFC2 = 328
tRFC4 = 328
REFI = 7290
tRPRE = 0
tWPRE = 0
tRRD_S = 6
tRRD_L = 6
tWTR_S = 7
tWTR_L = 7
tFAW = 33
tWR = 15
tWR2 = 15
tRTP = 7
tCCD_S = 4
tCCD_L = 4
tCKE = 5
tCKESR = 6
tXS = 338
tXP = 6
tRTRS = 1
[power]
VDD = 1.35
IDD0 = 69
IPP0 = 0.0
IDD2P = 11
IDD2N = 38
IDD3P = 38
IDD3N = 53
IDD4W = 135
IDD4R = 135
IDD5AB = 250
IDD6x = 24
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 934579
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x16_1866.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 32768
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 1.07
AL = 0
CL = 13
CWL = 10
tRCD = 13
tRP = 13
tRAS = 32
tRFC = 243
tRFC2 = 150
tRFC4 = 103
tREFI = 7285
tRPRE = 1
tWPRE = 1
tRRD_S = 5
tRRD_L = 6
tWTR_S = 3
tWTR_L = 7
tFAW = 28
tWR = 14
tWR2 = 15
tRTP = 7
tCCD_S = 4
tCCD_L = 5
tCKE = 5
tCKESR = 6
tXS = 253
tXP = 6
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 65
IPP0 = 3.6
IDD2P = 27
IDD2N = 40
IDD3P = 40
IDD3N = 55
IDD4W = 220
IDD4R = 180
IDD5AB = 170
IDD6x = 20
[system]
channel_size = 4096
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 934579
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x16_2133.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 32768
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.94
AL = 0
CL = 16
CWL = 11
tRCD = 16
tRP = 16
tRAS = 36
tRFC = 278
tRFC2 = 171
tRFC4 = 118
tREFI = 8328
tRPRE = 1
tWPRE = 1
tRRD_S = 6
tRRD_L = 7
tWTR_S = 3
tWTR_L = 8
tFAW = 32
tWR = 16
tWR2 = 17
tRTP = 8
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 289
tXP = 7
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 65
IPP0 = 3.6
IDD2P = 27
IDD2N = 42
IDD3P = 40
IDD3N = 55
IDD4W = 250
IDD4R = 195
IDD5AB = 170
IDD6x = 20
[system]
channel_size = 4096
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1063829
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x16_2133_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 32768
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.94
AL = 0
CL = 15
CWL = 11
tRCD = 15
tRP = 15
tRAS = 36
tRFC = 278
tRFC2 = 171
tRFC4 = 118
tREFI = 8328
tRPRE = 1
tWPRE = 1
tRRD_S = 6
tRRD_L = 7
tWTR_S = 3
tWTR_L = 8
tFAW = 32
tWR = 16
tWR2 = 17
tRTP = 8
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 289
tXP = 7
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 65
IPP0 = 3.6
IDD2P = 27
IDD2N = 42
IDD3P = 40
IDD3N = 55
IDD4W = 250
IDD4R = 195
IDD5AB = 170
IDD6x = 20
[system]
channel_size = 4096
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1063829
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x16_2400.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 32768
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.83
AL = 0
CL = 17
CWL = 12
tRCD = 17
tRP = 17
tRAS = 39
tRFC = 312
tRFC2 = 192
tRFC4 = 132
tREFI = 9360
tRPRE = 1
tWPRE = 1
tRRD_S = 7
tRRD_L = 8
tWTR_S = 3
tWTR_L = 9
tFAW = 36
tWR = 18
tWR2 = 19
tRTP = 9
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 324
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 65
IPP0 = 3.6
IDD2P = 29
IDD2N = 45
IDD3P = 40
IDD3N = 60
IDD4W = 285
IDD4R = 205
IDD5AB = 175
IDD6x = 20
[system]
channel_size = 4096
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1204819
output_level = 0
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x16_2400_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 32768
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.83
AL = 0
CL = 16
CWL = 12
tRCD = 16
tRP = 16
tRAS = 39
tRFC = 312
tRFC2 = 192
tRFC4 = 132
tREFI = 9360
tRPRE = 1
tWPRE = 1
tRRD_S = 7
tRRD_L = 8
tWTR_S = 3
tWTR_L = 9
tFAW = 36
tWR = 18
tWR2 = 19
tRTP = 9
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 324
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 65
IPP0 = 3.6
IDD2P = 29
IDD2N = 45
IDD3P = 40
IDD3N = 60
IDD4W = 285
IDD4R = 205
IDD5AB = 175
IDD6x = 20
[system]
channel_size = 4096
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1204819
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x16_2666.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 32768
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.75
AL = 0
CL = 19
CWL = 14
tRCD = 19
tRP = 19
tRAS = 43
tRFC = 347
tRFC2 = 214
tRFC4 = 147
tREFI = 10398
tRPRE = 1
tWPRE = 1
tRRD_S = 7
tRRD_L = 9
tWTR_S = 4
tWTR_L = 10
tFAW = 40
tWR = 20
tWR2 = 21
tRTP = 10
tCCD_S = 4
tCCD_L = 7
tCKE = 7
tCKESR = 8
tXS = 360
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 70
IPP0 = 3.6
IDD2P = 34
IDD2N = 50
IDD3P = 40
IDD3N = 65
IDD4W = 310
IDD4R = 225
IDD5AB = 175
IDD6x = 20
[system]
channel_size = 4096
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1333333
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x16_2666_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 32768
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.75
AL = 0
CL = 18
CWL = 14
tRCD = 18
tRP = 18
tRAS = 43
tRFC = 347
tRFC2 = 214
tRFC4 = 147
tREFI = 10398
tRPRE = 1
tWPRE = 1
tRRD_S = 7
tRRD_L = 9
tWTR_S = 4
tWTR_L = 10
tFAW = 40
tWR = 20
tWR2 = 21
tRTP = 10
tCCD_S = 4
tCCD_L = 7
tCKE = 7
tCKESR = 8
tXS = 360
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 70
IPP0 = 3.6
IDD2P = 34
IDD2N = 50
IDD3P = 40
IDD3N = 65
IDD4W = 310
IDD4R = 225
IDD5AB = 175
IDD6x = 20
[system]
channel_size = 4096
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1333333
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x4_1866.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 1.07
AL = 0
CL = 13
CWL = 10
tRCD = 13
tRP = 13
tRAS = 32
tRFC = 243
tRFC2 = 150
tRFC4 = 103
tREFI = 7285
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 5
tWTR_S = 3
tWTR_L = 7
tFAW = 16
tWR = 14
tWR2 = 15
tRTP = 7
tCCD_S = 4
tCCD_L = 5
tCKE = 5
tCKESR = 6
tXS = 253
tXP = 6
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 55
IPP0 = 3.0
IDD2P = 27
IDD2N = 40
IDD3P = 40
IDD3N = 55
IDD4W = 140
IDD4R = 125
IDD5AB = 170
IDD6x = 20
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 934579
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x4_2133.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.94
AL = 0
CL = 16
CWL = 11
tRCD = 16
tRP = 16
tRAS = 36
tRFC = 278
tRFC2 = 171
tRFC4 = 118
tREFI = 8328
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 8
tFAW = 16
tWR = 16
tWR2 = 17
tRTP = 8
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 289
tXP = 7
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 55
IPP0 = 3.0
IDD2P = 27
IDD2N = 42
IDD3P = 40
IDD3N = 55
IDD4W = 155
IDD4R = 135
IDD5AB = 170
IDD6x = 20
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1063829
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x4_2133_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.94
AL = 0
CL = 15
CWL = 11
tRCD = 15
tRP = 15
tRAS = 36
tRFC = 278
tRFC2 = 171
tRFC4 = 118
tREFI = 8328
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 8
tFAW = 16
tWR = 16
tWR2 = 17
tRTP = 8
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 289
tXP = 7
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 55
IPP0 = 3.0
IDD2P = 27
IDD2N = 42
IDD3P = 40
IDD3N = 55
IDD4W = 155
IDD4R = 135
IDD5AB = 170
IDD6x = 20
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1063829
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x4_2400.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.83
AL = 0
CL = 17
CWL = 12
tRCD = 17
tRP = 17
tRAS = 39
tRFC = 312
tRFC2 = 192
tRFC4 = 132
tREFI = 9360
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 9
tFAW = 16
tWR = 18
tWR2 = 19
tRTP = 9
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 324
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 60
IPP0 = 3.0
IDD2P = 29
IDD2N = 45
IDD3P = 40
IDD3N = 60
IDD4W = 175
IDD4R = 145
IDD5AB = 175
IDD6x = 20
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
cmd_queue_size = 8
trans_queue_size = 32
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
[other]
epoch_period = 1204819
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x4_2400_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.83
AL = 0
CL = 16
CWL = 12
tRCD = 16
tRP = 16
tRAS = 39
tRFC = 312
tRFC2 = 192
tRFC4 = 132
tREFI = 9360
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 9
tFAW = 16
tWR = 18
tWR2 = 19
tRTP = 9
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 324
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 60
IPP0 = 3.0
IDD2P = 29
IDD2N = 45
IDD3P = 40
IDD3N = 60
IDD4W = 175
IDD4R = 145
IDD5AB = 175
IDD6x = 20
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1204819
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x4_2666.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.75
AL = 0
CL = 19
CWL = 14
tRCD = 19
tRP = 19
tRAS = 43
tRFC = 347
tRFC2 = 214
tRFC4 = 147
tREFI = 10398
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 7
tWTR_S = 4
tWTR_L = 10
tFAW = 16
tWR = 20
tWR2 = 21
tRTP = 10
tCCD_S = 4
tCCD_L = 7
tCKE = 7
tCKESR = 8
tXS = 360
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 65
IPP0 = 3.0
IDD2P = 34
IDD2N = 50
IDD3P = 40
IDD3N = 65
IDD4W = 195
IDD4R = 170
IDD5AB = 175
IDD6x = 20
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1333333
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x4_2666_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.75
AL = 0
CL = 18
CWL = 14
tRCD = 18
tRP = 18
tRAS = 43
tRFC = 347
tRFC2 = 214
tRFC4 = 147
tREFI = 10398
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 7
tWTR_S = 4
tWTR_L = 10
tFAW = 16
tWR = 20
tWR2 = 21
tRTP = 10
tCCD_S = 4
tCCD_L = 7
tCKE = 7
tCKESR = 8
tXS = 360
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 65
IPP0 = 3.0
IDD2P = 34
IDD2N = 50
IDD3P = 40
IDD3N = 65
IDD4W = 195
IDD4R = 170
IDD5AB = 175
IDD6x = 20
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1333333
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x8_1866.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 32768
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 1.07
AL = 0
CL = 13
CWL = 10
tRCD = 13
tRP = 13
tRAS = 32
tRFC = 243
tRFC2 = 150
tRFC4 = 103
tREFI = 7285
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 5
tWTR_S = 3
tWTR_L = 7
tFAW = 22
tWR = 14
tWR2 = 15
tRTP = 7
tCCD_S = 4
tCCD_L = 5
tCKE = 5
tCKESR = 6
tXS = 253
tXP = 6
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 55
IPP0 = 3.0
IDD2P = 27
IDD2N = 40
IDD3P = 40
IDD3N = 55
IDD4W = 140
IDD4R = 125
IDD5AB = 170
IDD6x = 20
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 934579
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x8_2133.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 32768
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.94
AL = 0
CL = 16
CWL = 11
tRCD = 16
tRP = 16
tRAS = 36
tRFC = 278
tRFC2 = 171
tRFC4 = 118
tREFI = 8328
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 8
tFAW = 23
tWR = 16
tWR2 = 17
tRTP = 8
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 289
tXP = 7
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 55
IPP0 = 3.0
IDD2P = 27
IDD2N = 42
IDD3P = 40
IDD3N = 55
IDD4W = 155
IDD4R = 135
IDD5AB = 170
IDD6x = 20
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1063829
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x8_2133_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 32768
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.94
AL = 0
CL = 15
CWL = 11
tRCD = 15
tRP = 15
tRAS = 36
tRFC = 278
tRFC2 = 171
tRFC4 = 118
tREFI = 8328
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 8
tFAW = 23
tWR = 16
tWR2 = 17
tRTP = 8
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 289
tXP = 7
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 55
IPP0 = 3.0
IDD2P = 27
IDD2N = 42
IDD3P = 40
IDD3N = 55
IDD4W = 155
IDD4R = 135
IDD5AB = 170
IDD6x = 20
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1063829
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x8_2400.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 32768
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.83
AL = 0
CL = 17
CWL = 12
tRCD = 17
tRP = 17
tRAS = 39
tRFC = 312
tRFC2 = 192
tRFC4 = 132
tREFI = 9360
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 9
tFAW = 26
tWR = 18
tWR2 = 19
tRTP = 9
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 324
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 60
IPP0 = 3.0
IDD2P = 29
IDD2N = 45
IDD3P = 40
IDD3N = 60
IDD4W = 175
IDD4R = 145
IDD5AB = 175
IDD6x = 20
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1204819
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x8_2400_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 32768
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.83
AL = 0
CL = 16
CWL = 12
tRCD = 16
tRP = 16
tRAS = 39
tRFC = 312
tRFC2 = 192
tRFC4 = 132
tREFI = 9360
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 9
tFAW = 26
tWR = 18
tWR2 = 19
tRTP = 9
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 324
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 60
IPP0 = 3.0
IDD2P = 29
IDD2N = 45
IDD3P = 40
IDD3N = 60
IDD4W = 175
IDD4R = 145
IDD5AB = 175
IDD6x = 20
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1204819
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x8_2666.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 32768
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.75
AL = 0
CL = 19
CWL = 14
tRCD = 19
tRP = 19
tRAS = 43
tRFC = 347
tRFC2 = 214
tRFC4 = 147
tREFI = 10398
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 7
tWTR_S = 4
tWTR_L = 10
tFAW = 28
tWR = 20
tWR2 = 21
tRTP = 10
tCCD_S = 4
tCCD_L = 7
tCKE = 7
tCKESR = 8
tXS = 360
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 65
IPP0 = 3.0
IDD2P = 34
IDD2N = 50
IDD3P = 40
IDD3N = 65
IDD4W = 195
IDD4R = 170
IDD5AB = 175
IDD6x = 20
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1333333
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_4Gb_x8_2666_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 32768
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.75
AL = 0
CL = 18
CWL = 14
tRCD = 18
tRP = 18
tRAS = 43
tRFC = 347
tRFC2 = 214
tRFC4 = 147
tREFI = 10398
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 7
tWTR_S = 4
tWTR_L = 10
tFAW = 28
tWR = 20
tWR2 = 21
tRTP = 10
tCCD_S = 4
tCCD_L = 7
tCKE = 7
tCKESR = 8
tXS = 360
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 65
IPP0 = 3.0
IDD2P = 34
IDD2N = 50
IDD3P = 40
IDD3N = 65
IDD4W = 195
IDD4R = 170
IDD5AB = 175
IDD6x = 20
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1333333
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x16_1866.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 1.07
AL = 0
CL = 13
CWL = 10
tRCD = 13
tRP = 13
tRAS = 32
tRFC = 327
tRFC2 = 243
tRFC4 = 150
tREFI = 7285
tRPRE = 1
tWPRE = 1
tRRD_S = 5
tRRD_L = 6
tWTR_S = 3
tWTR_L = 7
tFAW = 28
tWR = 14
tWR2 = 15
tRTP = 7
tCCD_S = 4
tCCD_L = 5
tCKE = 5
tCKESR = 6
tXS = 337
tXP = 6
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 75
IPP0 = 4.0
IDD2P = 25
IDD2N = 33
IDD3P = 39
IDD3N = 44
IDD4W = 225
IDD4R = 225
IDD5AB = 280
IDD6x = 30
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 934579
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x16_2133.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.94
AL = 0
CL = 16
CWL = 11
tRCD = 16
tRP = 16
tRAS = 36
tRFC = 374
tRFC2 = 278
tRFC4 = 171
tREFI = 8328
tRPRE = 1
tWPRE = 1
tRRD_S = 6
tRRD_L = 7
tWTR_S = 3
tWTR_L = 8
tFAW = 32
tWR = 16
tWR2 = 17
tRTP = 8
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 385
tXP = 7
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 75
IPP0 = 4.0
IDD2P = 25
IDD2N = 33
IDD3P = 39
IDD3N = 44
IDD4W = 225
IDD4R = 225
IDD5AB = 280
IDD6x = 30
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1063829
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x16_2133_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.94
AL = 0
CL = 15
CWL = 11
tRCD = 15
tRP = 15
tRAS = 36
tRFC = 374
tRFC2 = 278
tRFC4 = 171
tREFI = 8328
tRPRE = 1
tWPRE = 1
tRRD_S = 6
tRRD_L = 7
tWTR_S = 3
tWTR_L = 8
tFAW = 32
tWR = 16
tWR2 = 17
tRTP = 8
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 385
tXP = 7
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 75
IPP0 = 4.0
IDD2P = 25
IDD2N = 33
IDD3P = 39
IDD3N = 44
IDD4W = 225
IDD4R = 225
IDD5AB = 280
IDD6x = 30
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1063829
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x16_2400.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.83
AL = 0
CL = 17
CWL = 12
tRCD = 17
tRP = 17
tRAS = 39
tRFC = 420
tRFC2 = 312
tRFC4 = 192
tREFI = 9360
tRPRE = 1
tWPRE = 1
tRRD_S = 7
tRRD_L = 8
tWTR_S = 3
tWTR_L = 9
tFAW = 36
tWR = 18
tWR2 = 19
tRTP = 9
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 432
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 80
IPP0 = 4.0
IDD2P = 25
IDD2N = 34
IDD3P = 41
IDD3N = 47
IDD4W = 228
IDD4R = 243
IDD5AB = 280
IDD6x = 30
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1204819
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x16_2400_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.83
AL = 0
CL = 16
CWL = 12
tRCD = 16
tRP = 16
tRAS = 39
tRFC = 420
tRFC2 = 312
tRFC4 = 192
tREFI = 9360
tRPRE = 1
tWPRE = 1
tRRD_S = 7
tRRD_L = 8
tWTR_S = 3
tWTR_L = 9
tFAW = 36
tWR = 18
tWR2 = 19
tRTP = 9
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 432
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 80
IPP0 = 4.0
IDD2P = 25
IDD2N = 34
IDD3P = 41
IDD3N = 47
IDD4W = 228
IDD4R = 243
IDD5AB = 280
IDD6x = 30
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1204819
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x16_2666.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.75
AL = 0
CL = 19
CWL = 14
tRCD = 19
tRP = 19
tRAS = 43
tRFC = 467
tRFC2 = 347
tRFC4 = 214
tREFI = 10398
tRPRE = 1
tWPRE = 1
tRRD_S = 7
tRRD_L = 9
tWTR_S = 4
tWTR_L = 10
tFAW = 40
tWR = 20
tWR2 = 21
tRTP = 10
tCCD_S = 4
tCCD_L = 7
tCKE = 7
tCKESR = 8
tXS = 480
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 85
IPP0 = 4.0
IDD2P = 25
IDD2N = 35
IDD3P = 43
IDD3N = 50
IDD4W = 244
IDD4R = 263
IDD5AB = 280
IDD6x = 30
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1333333
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x16_2666_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.75
AL = 0
CL = 18
CWL = 14
tRCD = 18
tRP = 18
tRAS = 43
tRFC = 467
tRFC2 = 347
tRFC4 = 214
tREFI = 10398
tRPRE = 1
tWPRE = 1
tRRD_S = 7
tRRD_L = 9
tWTR_S = 4
tWTR_L = 10
tFAW = 40
tWR = 20
tWR2 = 21
tRTP = 10
tCCD_S = 4
tCCD_L = 7
tCKE = 7
tCKESR = 8
tXS = 480
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 85
IPP0 = 4.0
IDD2P = 25
IDD2N = 35
IDD3P = 43
IDD3N = 50
IDD4W = 244
IDD4R = 263
IDD5AB = 280
IDD6x = 30
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1333333
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x16_2933.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.68
AL = 0
CL = 21
CWL = 16
tRCD = 21
tRP = 21
tRAS = 47
tRFC = 514
tRFC2 = 382
tRFC4 = 235
tREFI = 11439
tRPRE = 1
tWPRE = 1
tRRD_S = 8
tRRD_L = 10
tWTR_S = 4
tWTR_L = 11
tFAW = 44
tWR = 22
tWR2 = 23
tRTP = 11
tCCD_S = 4
tCCD_L = 8
tCKE = 8
tCKESR = 9
tXS = 528
tXP = 9
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 90
IPP0 = 4.0
IDD2P = 25
IDD2N = 36
IDD3P = 45
IDD3N = 53
IDD4W = 261
IDD4R = 283
IDD5AB = 280
IDD6x = 30
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1470588
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x16_2933_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.68
AL = 0
CL = 20
CWL = 16
tRCD = 20
tRP = 20
tRAS = 47
tRFC = 514
tRFC2 = 382
tRFC4 = 235
tREFI = 11439
tRPRE = 1
tWPRE = 1
tRRD_S = 8
tRRD_L = 10
tWTR_S = 4
tWTR_L = 11
tFAW = 44
tWR = 22
tWR2 = 23
tRTP = 11
tCCD_S = 4
tCCD_L = 8
tCKE = 8
tCKESR = 9
tXS = 528
tXP = 9
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 90
IPP0 = 4.0
IDD2P = 25
IDD2N = 36
IDD3P = 45
IDD3N = 53
IDD4W = 261
IDD4R = 283
IDD5AB = 280
IDD6x = 30
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1470588
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x16_3200.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 2
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 16
BL = 8
[timing]
tCK = 0.63
AL = 0
CL = 22
CWL = 16
tRCD = 22
tRP = 22
tRAS = 52
tRFC = 560
tRFC2 = 416
tRFC4 = 256
tREFI = 12480
tRPRE = 1
tWPRE = 1
tRRD_S = 9
tRRD_L = 11
tWTR_S = 4
tWTR_L = 12
tFAW = 48
tWR = 24
tWR2 = 25
tRTP = 12
tCCD_S = 4
tCCD_L = 8
tCKE = 8
tCKESR = 9
tXS = 576
tXP = 10
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 95
IPP0 = 4.0
IDD2P = 25
IDD2N = 37
IDD3P = 47
IDD3N = 56
IDD4W = 278
IDD4R = 302
IDD5AB = 280
IDD6x = 30
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1587301
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x4_1866.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 131072
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 1.07
AL = 0
CL = 13
CWL = 10
tRCD = 13
tRP = 13
tRAS = 32
tRFC = 327
tRFC2 = 243
tRFC4 = 150
tREFI = 7285
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 5
tWTR_S = 3
tWTR_L = 7
tFAW = 16
tWR = 14
tWR2 = 15
tRTP = 7
tCCD_S = 4
tCCD_L = 5
tCKE = 5
tCKESR = 6
tXS = 337
tXP = 6
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 40
IPP0 = 3.0
IDD2P = 25
IDD2N = 33
IDD3P = 30
IDD3N = 35
IDD4W = 95
IDD4R = 100
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 32768
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 934579
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x4_2133.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 131072
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.94
AL = 0
CL = 16
CWL = 11
tRCD = 16
tRP = 16
tRAS = 36
tRFC = 374
tRFC2 = 278
tRFC4 = 171
tREFI = 8328
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 8
tFAW = 16
tWR = 16
tWR2 = 17
tRTP = 8
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 385
tXP = 7
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 40
IPP0 = 3.0
IDD2P = 25
IDD2N = 33
IDD3P = 30
IDD3N = 35
IDD4W = 95
IDD4R = 100
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 32768
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1063829
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x4_2133_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 131072
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.94
AL = 0
CL = 15
CWL = 11
tRCD = 15
tRP = 15
tRAS = 36
tRFC = 374
tRFC2 = 278
tRFC4 = 171
tREFI = 8328
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 8
tFAW = 16
tWR = 16
tWR2 = 17
tRTP = 8
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 385
tXP = 7
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 40
IPP0 = 3.0
IDD2P = 25
IDD2N = 33
IDD3P = 30
IDD3N = 35
IDD4W = 95
IDD4R = 100
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 32768
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1063829
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x4_2400.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 131072
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.83
AL = 0
CL = 17
CWL = 12
tRCD = 17
tRP = 17
tRAS = 39
tRFC = 420
tRFC2 = 312
tRFC4 = 192
tREFI = 9360
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 9
tFAW = 16
tWR = 18
tWR2 = 19
tRTP = 9
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 432
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 43
IPP0 = 3.0
IDD2P = 25
IDD2N = 34
IDD3P = 32
IDD3N = 38
IDD4W = 103
IDD4R = 110
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 32768
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1204819
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x4_2400_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 131072
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.83
AL = 0
CL = 16
CWL = 12
tRCD = 16
tRP = 16
tRAS = 39
tRFC = 420
tRFC2 = 312
tRFC4 = 192
tREFI = 9360
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 9
tFAW = 16
tWR = 18
tWR2 = 19
tRTP = 9
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 432
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 43
IPP0 = 3.0
IDD2P = 25
IDD2N = 34
IDD3P = 32
IDD3N = 38
IDD4W = 103
IDD4R = 110
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 32768
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1204819
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x4_2666.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 131072
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.75
AL = 0
CL = 19
CWL = 14
tRCD = 19
tRP = 19
tRAS = 43
tRFC = 467
tRFC2 = 347
tRFC4 = 214
tREFI = 10398
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 7
tWTR_S = 4
tWTR_L = 10
tFAW = 16
tWR = 20
tWR2 = 21
tRTP = 10
tCCD_S = 4
tCCD_L = 7
tCKE = 7
tCKESR = 8
tXS = 480
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 46
IPP0 = 3.0
IDD2P = 25
IDD2N = 35
IDD3P = 34
IDD3N = 41
IDD4W = 112
IDD4R = 121
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 32768
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1333333
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x4_2666_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 131072
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.75
AL = 0
CL = 18
CWL = 14
tRCD = 18
tRP = 18
tRAS = 43
tRFC = 467
tRFC2 = 347
tRFC4 = 214
tREFI = 10398
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 7
tWTR_S = 4
tWTR_L = 10
tFAW = 16
tWR = 20
tWR2 = 21
tRTP = 10
tCCD_S = 4
tCCD_L = 7
tCKE = 7
tCKESR = 8
tXS = 480
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 46
IPP0 = 3.0
IDD2P = 25
IDD2N = 35
IDD3P = 34
IDD3N = 41
IDD4W = 112
IDD4R = 121
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 32768
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1333333
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x4_2933.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 131072
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.68
AL = 0
CL = 21
CWL = 16
tRCD = 21
tRP = 21
tRAS = 47
tRFC = 514
tRFC2 = 382
tRFC4 = 235
tREFI = 11439
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 8
tWTR_S = 4
tWTR_L = 11
tFAW = 16
tWR = 22
tWR2 = 23
tRTP = 11
tCCD_S = 4
tCCD_L = 8
tCKE = 8
tCKESR = 9
tXS = 528
tXP = 9
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 49
IPP0 = 3.0
IDD2P = 25
IDD2N = 36
IDD3P = 36
IDD3N = 44
IDD4W = 121
IDD4R = 132
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 32768
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1470588
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x4_2933_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 131072
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.68
AL = 0
CL = 20
CWL = 16
tRCD = 20
tRP = 20
tRAS = 47
tRFC = 514
tRFC2 = 382
tRFC4 = 235
tREFI = 11439
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 8
tWTR_S = 4
tWTR_L = 11
tFAW = 16
tWR = 22
tWR2 = 23
tRTP = 11
tCCD_S = 4
tCCD_L = 8
tCKE = 8
tCKESR = 9
tXS = 528
tXP = 9
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 49
IPP0 = 3.0
IDD2P = 25
IDD2N = 36
IDD3P = 36
IDD3N = 44
IDD4W = 121
IDD4R = 132
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 32768
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1470588
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x4_3200.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 131072
columns = 1024
device_width = 4
BL = 8
[timing]
tCK = 0.63
AL = 0
CL = 22
CWL = 16
tRCD = 22
tRP = 22
tRAS = 52
tRFC = 560
tRFC2 = 416
tRFC4 = 256
tREFI = 12480
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 8
tWTR_S = 4
tWTR_L = 12
tFAW = 16
tWR = 24
tWR2 = 25
tRTP = 12
tCCD_S = 4
tCCD_L = 8
tCKE = 8
tCKESR = 9
tXS = 576
tXP = 10
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 52
IPP0 = 3.0
IDD2P = 25
IDD2N = 37
IDD3P = 38
IDD3N = 47
IDD4W = 130
IDD4R = 143
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 32768
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1587301
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x8_1866.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 1.07
AL = 0
CL = 13
CWL = 10
tRCD = 13
tRP = 13
tRAS = 32
tRFC = 327
tRFC2 = 243
tRFC4 = 150
tREFI = 7285
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 5
tWTR_S = 3
tWTR_L = 7
tFAW = 22
tWR = 14
tWR2 = 15
tRTP = 7
tCCD_S = 4
tCCD_L = 5
tCKE = 5
tCKESR = 6
tXS = 337
tXP = 6
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 45
IPP0 = 3.0
IDD2P = 25
IDD2N = 33
IDD3P = 35
IDD3N = 40
IDD4W = 115
IDD4R = 125
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 934579
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x8_2133.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.94
AL = 0
CL = 16
CWL = 11
tRCD = 16
tRP = 16
tRAS = 36
tRFC = 374
tRFC2 = 278
tRFC4 = 171
tREFI = 8328
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 8
tFAW = 23
tWR = 16
tWR2 = 17
tRTP = 8
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 385
tXP = 7
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 45
IPP0 = 3.0
IDD2P = 25
IDD2N = 33
IDD3P = 35
IDD3N = 40
IDD4W = 115
IDD4R = 125
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1063829
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x8_2133_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.94
AL = 0
CL = 15
CWL = 11
tRCD = 15
tRP = 15
tRAS = 36
tRFC = 374
tRFC2 = 278
tRFC4 = 171
tREFI = 8328
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 8
tFAW = 23
tWR = 16
tWR2 = 17
tRTP = 8
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 385
tXP = 7
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 45
IPP0 = 3.0
IDD2P = 25
IDD2N = 33
IDD3P = 35
IDD3N = 40
IDD4W = 115
IDD4R = 125
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1063829
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x8_2400.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.83
AL = 0
CL = 17
CWL = 12
tRCD = 17
tRP = 17
tRAS = 39
tRFC = 420
tRFC2 = 312
tRFC4 = 192
tREFI = 9360
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 9
tFAW = 26
tWR = 18
tWR2 = 19
tRTP = 9
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 432
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 48
IPP0 = 3.0
IDD2P = 25
IDD2N = 34
IDD3P = 37
IDD3N = 43
IDD4W = 123
IDD4R = 135
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1204819
output_level = 1
[thermal]
loc_mapping = 33,33,32-31,30-29,26:13-27-28,12:3
power_epoch_period = 100000; power epoch period (# cycle)
chip_dim_x = 0.008; chip size in x dimension [m]
chip_dim_y = 0.008; chip size in y dimension [m]
amb_temp = 40; The ambient temperature in [C]
mat_dim_x = 512;
mat_dim_y = 512;
bank_order = 0; 0: x direction first, 1: y direction first
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x8_2400_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.83
AL = 0
CL = 16
CWL = 12
tRCD = 16
tRP = 16
tRAS = 39
tRFC = 420
tRFC2 = 312
tRFC4 = 192
tREFI = 9360
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 9
tFAW = 26
tWR = 18
tWR2 = 19
tRTP = 9
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 432
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 48
IPP0 = 3.0
IDD2P = 25
IDD2N = 34
IDD3P = 37
IDD3N = 43
IDD4W = 123
IDD4R = 135
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1204819
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x8_2666.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.75
AL = 0
CL = 19
CWL = 14
tRCD = 19
tRP = 19
tRAS = 43
tRFC = 467
tRFC2 = 347
tRFC4 = 214
tREFI = 10398
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 7
tWTR_S = 4
tWTR_L = 10
tFAW = 28
tWR = 20
tWR2 = 21
tRTP = 10
tCCD_S = 4
tCCD_L = 7
tCKE = 7
tCKESR = 8
tXS = 480
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 51
IPP0 = 3.0
IDD2P = 25
IDD2N = 35
IDD3P = 39
IDD3N = 46
IDD4W = 132
IDD4R = 146
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1333333
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x8_2666_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.75
AL = 0
CL = 18
CWL = 14
tRCD = 18
tRP = 18
tRAS = 43
tRFC = 467
tRFC2 = 347
tRFC4 = 214
tREFI = 10398
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 7
tWTR_S = 4
tWTR_L = 10
tFAW = 28
tWR = 20
tWR2 = 21
tRTP = 10
tCCD_S = 4
tCCD_L = 7
tCKE = 7
tCKESR = 8
tXS = 480
tXP = 8
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 51
IPP0 = 3.0
IDD2P = 25
IDD2N = 35
IDD3P = 39
IDD3N = 46
IDD4W = 132
IDD4R = 146
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1333333
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x8_2933.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.68
AL = 0
CL = 21
CWL = 16
tRCD = 21
tRP = 21
tRAS = 47
tRFC = 514
tRFC2 = 382
tRFC4 = 235
tREFI = 11439
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 8
tWTR_S = 4
tWTR_L = 11
tFAW = 31
tWR = 22
tWR2 = 23
tRTP = 11
tCCD_S = 4
tCCD_L = 8
tCKE = 8
tCKESR = 9
tXS = 528
tXP = 9
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 54
IPP0 = 3.0
IDD2P = 25
IDD2N = 36
IDD3P = 41
IDD3N = 49
IDD4W = 141
IDD4R = 157
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1470588
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x8_2933_2.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.68
AL = 0
CL = 20
CWL = 16
tRCD = 20
tRP = 20
tRAS = 47
tRFC = 514
tRFC2 = 382
tRFC4 = 235
tREFI = 11439
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 8
tWTR_S = 4
tWTR_L = 11
tFAW = 31
tWR = 22
tWR2 = 23
tRTP = 11
tCCD_S = 4
tCCD_L = 8
tCKE = 8
tCKESR = 9
tXS = 528
tXP = 9
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 54
IPP0 = 3.0
IDD2P = 25
IDD2N = 36
IDD3P = 41
IDD3N = 49
IDD4W = 141
IDD4R = 157
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1470588
output_level = 1
================================================
FILE: src/DRAMsim3/configs/DDR4_8Gb_x8_3200.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.63
AL = 0
CL = 22
CWL = 16
tRCD = 22
tRP = 22
tRAS = 52
tRFC = 560
tRFC2 = 416
tRFC4 = 256
tREFI = 12480
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 8
tWTR_S = 4
tWTR_L = 12
tFAW = 34
tWR = 24
tWR2 = 25
tRTP = 12
tCCD_S = 4
tCCD_L = 8
tCKE = 8
tCKESR = 9
tXS = 576
tXP = 10
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 57
IPP0 = 3.0
IDD2P = 25
IDD2N = 37
IDD3P = 43
IDD3N = 52
IDD4W = 150
IDD4R = 168
IDD5AB = 250
IDD6x = 30
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1587301
output_level = 1
================================================
FILE: src/DRAMsim3/configs/GDDR5X_8Gb_x32.ini
================================================
[dram_structure]
protocol = GDDR5X
bankgroups = 4
banks_per_group = 4
rows = 16384
columns = 64
device_width = 32
BL = 16
bankgroup_enable = false
[timing]
tCK = 0.666 (1/1.5)
CL = 24
CWL = 7
tRCDRD = 18
tRCDWR = 15
tRP = 18
tRAS = 42
tRFC = 98
tREFI = 11699
tRPRE = 1; read preamble
tWPRE = 1; TODO figure this out, should be 1 or 2
tRRD_S = 9
tRRD_L = 9
tWTR_S = 8
tWTR_L = 8
tFAW = 35
tWR = 18
tCCD_S = 2
tCCD_L = 3
tXS = 116
tCKE = 16
tCKSRE = 8
tXP = 12
tRTRS = 0
tRTP_L = 3
tRTP_S = 3
tPPD = 2
t32AW = 280
[power]
VDD = 1.35
IDD0 = 500
IDD2P = 220
IDD2N = 260
IDD3P = 330
IDD3N = 480
IDD4W = 2320
IDD4R = 2160
IDD5AB = 600
IDD5PB = 60
IDD6x = 65
[system]
channel_size = 4096
channels = 1
bus_width = 128
address_mapping = rochrababgco
queue_structure = PER_BANK
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1501501
output_level = 1
[thermal]
power_epoch_period = 1000; power epoch period (# cycle)
chip_dim_x = 0.008; chip size in x dimension [m]
chip_dim_y = 0.008; chip size in y dimension [m]
amb_temp = 40; The ambient temperature in [C]
mat_dim_x = 512;
mat_dim_y = 512;
bank_order = 1; 0: x direction first, 1: y direction first
================================================
FILE: src/DRAMsim3/configs/GDDR5_1Gb_x32.ini
================================================
[dram_structure]
protocol = GDDR5
bankgroups = 4
banks_per_group = 4
rows = 4096
columns = 64
device_width = 32
BL = 8
bankgroup_enable = false
[timing]
tCK = 0.667
CL = 24
CWL = 7
tRCDRD = 18
tRCDWR = 15
tRP = 18
tRAS = 42
tRFC = 98
tREFI = 11699
tRPRE = 1; read preamble
tWPRE = 1; TODO figure this out, should be 1 or 2
tRRD_S = 9
tRRD_L = 9
tWTR_S = 8
tWTR_L = 8
tFAW = 35
tWR = 18
tCCD_S = 2
tCCD_L = 3
tXS = 116
tCKE = 16
tCKESR = 8
tXP = 12
tRTRS = 0
tRTP_L = 3
tRTP_S = 3
tPPD = 2
t32AW = 280
[power]
VDD = 1.5
IDD0 = 490
IDD2P = 210
IDD2N = 250
IDD3P = 310
IDD3N = 450
IDD4W = 1160
IDD4R = 1080
IDD5AB = 450
IDD5PB = 45
IDD6x = 60
[system]
channel_size = 1024
channels = 1
bus_width = 256
address_mapping = rochrababgco
queue_structure = PER_BANK
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1499250
output_level = 1
================================================
FILE: src/DRAMsim3/configs/GDDR5_8Gb_x32.ini
================================================
[dram_structure]
protocol = GDDR5
bankgroups = 4
banks_per_group = 4
rows = 16384
columns = 128
device_width = 32
BL = 8
bankgroup_enable = false
[timing]
tCK = 0.667
CL = 24
CWL = 7
tRCDRD = 24
tRCDWR = 20
tRP = 24
tRAS = 56
tRFC = 74
tREFI = 3800
tRPRE = 1; read preamble
tWPRE = 1; TODO figure this out, should be 1 or 2
tRRD_S = 10
tRRD_L = 10
tWTR_S = 10
tWTR_L = 10
tFAW = 40
tWR = 24
tCCD_S = 2
tCCD_L = 3
tXS = 94
tCKESR = 2
tXP = 12
tRTRS = 1
tRTP_L = 2
tRTP_S = 2
tPPD = 5
t32AW = 360
tRFCb = 30
tREFIb = 238
[power]
VDD = 1.5
IDD0 = 71
IDD2P = 45
IDD2N = 60
IDD3P = 50
IDD3N = 61
IDD4W = 231
IDD4R = 248
IDD5AB = 286
IDD5PB = 45
IDD6x = 35
[system]
channel_size = 4096
channels = 1
bus_width = 128
address_mapping = rochrababgco
queue_structure = PER_BANK
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1499250
output_level = 1
================================================
FILE: src/DRAMsim3/configs/GDDR6_8Gb_x16.ini
================================================
[dram_structure]
protocol = GDDR6
bankgroups = 4
banks_per_group = 4
rows = 16384
columns = 128
device_width = 16
BL = 16
bankgroup_enable = false
[timing]
tCK = 0.66
CL = 24
CWL = 16
tRCDRD = 24
tRCDWR = 20
tRP = 24
tRAS = 54
tRFC = 126
tREFI = 11862
tRPRE = 1; read preamble
tWPRE = 1; TODO figure this out, should be 1 or 2
tRRD_S = 9
tRRD_L = 9
tWTR_S = 7
tWTR_L = 7
tFAW = 32
tWR = 16
tCCD_S = 3
tCCD_L = 4
tXS = 132
tCKESR = 8
tXP = 12
tRTRS = 1
tRTP_L = 3
tRTP_S = 3
tPPD = 2
t32AW = 420
tRFCb = 30
tREFIb = 238
[power]
VDD = 1.35
IDD0 = 71
IDD2P = 45
IDD2N = 60
IDD3P = 50
IDD3N = 61
IDD4W = 231
IDD4R = 248
IDD5AB = 286
IDD5PB = 45
IDD6x = 35
[system]
channel_size = 4096
channels = 1
bus_width = 128
address_mapping = rochrababgco
queue_structure = PER_BANK
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1499250
output_level = 1
;16n prefetch
================================================
FILE: src/DRAMsim3/configs/HBM1_4Gb_x128.ini
================================================
[dram_structure]
protocol = HBM
bankgroups = 4
banks_per_group = 4
rows = 16384
columns = 64
device_width = 128
BL = 4
num_dies = 4
[timing]
tCK = 2
CL = 7
CWL = 2
tRCDRD = 7
tRCDWR = 7
tRP = 7
tRAS = 17
tRFC = 130
tREFI = 1950
tREFIb = 64
tRPRE = 1
tWPRE = 1
tRRD_S = 2
tRRD_L = 3
tWTR_S = 3
tWTR_L = 4
tFAW = 15
tWR = 8
tCCD_S = 1
tCCD_L = 1
tXS = 134
tCKE = 4
tCKSRE = 5
tXP = 4
tRTP_L = 3
tRTP_S = 2
[power]
VDD = 1.2
IDD0 = 65
IDD2P = 28
IDD2N = 40
IDD3P = 40
IDD3N = 55
IDD4W = 440
IDD4R = 360
IDD5AB = 250
IDD6x = 31
[system]
channel_size = 512
channels = 8
bus_width = 128
address_mapping = rorabgbachco
queue_structure = PER_BANK
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
unified_queue = False
[other]
epoch_period = 500000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/HBM2_4Gb_x128.ini
================================================
[dram_structure]
protocol = HBM
bankgroups = 4
banks_per_group = 4
rows = 16384
columns = 64
device_width = 128
BL = 4
num_dies = 4
[timing]
tCK = 1
CL = 14
CWL = 4
tRCDRD = 14
tRCDWR = 14
tRP = 14
tRAS = 34
tRFC = 260
tREFI = 3900
tREFIb = 128
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 6
tWTR_L = 8
tFAW = 30
tWR = 16
tCCD_S = 1
tCCD_L = 2
tXS = 268
tCKE = 8
tCKSRE = 10
tXP = 8
tRTP_L = 6
tRTP_S = 4
[power]
VDD = 1.2
IDD0 = 65
IDD2P = 28
IDD2N = 40
IDD3P = 40
IDD3N = 55
IDD4W = 500
IDD4R = 390
IDD5AB = 250
IDD6x = 31
[system]
channel_size = 512
channels = 8
bus_width = 128
address_mapping = rorabgbachco
queue_structure = PER_BANK
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
unified_queue = False
[other]
epoch_period = 1000000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/HBM2_8Gb_x128.ini
================================================
[dram_structure]
protocol = HBM
bankgroups = 4
banks_per_group = 4
rows = 32768
columns = 64
device_width = 128
BL = 4
num_dies = 4
[timing]
tCK = 1
CL = 14
CWL = 4
tRCDRD = 14
tRCDWR = 14
tRP = 14
tRAS = 34
tRFC = 260
tREFI = 3900
tREFIb = 128
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 6
tWTR_L = 8
tFAW = 30
tWR = 16
tCCD_S = 1
tCCD_L = 2
tXS = 268
tCKE = 8
tCKSRE = 10
tXP = 8
tRTP_L = 6
tRTP_S = 4
[power]
VDD = 1.2
IDD0 = 65
IDD2P = 28
IDD2N = 40
IDD3P = 40
IDD3N = 55
IDD4W = 500
IDD4R = 390
IDD5AB = 250
IDD6x = 31
[system]
channel_size = 1024
channels = 8
bus_width = 128
address_mapping = rorabgbachco
queue_structure = PER_BANK
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
unified_queue = False
[other]
epoch_period = 1000000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/HBM_4Gb_x128.ini
================================================
[dram_structure]
protocol = HBM
bankgroups = 4
banks_per_group = 4
rows = 16384
columns = 64
device_width = 128
BL = 4
num_dies = 4
[timing]
tCK = 2
AL = 0
CL = 7
CWL = 4
tRCDRD = 7
tRCDWR = 6
tRP = 7
tRAS = 17
tRFC =
tREFI = 1950
tRPRE = 1; read preamble
tWPRE = 1; TODO figure this out, should be 1 or 2
tRRD_S = 4
tRRD_L = 5
tWTR_S = 2
tWTR_L = 4
tFAW = 20
tWR = 8
tCCD_S = 2
tCCD_L = 3
tXS = 0
tCKSRE = 0
tXP = 5
tRTP_L = 7
tRTP_S = 6
tPPD = 5
t32AW = 330
tRFCb =
tREFIb =
tRREFD =
tRFCPB =
[power]
VDD = 1.2
IDD0 = 48
IDD2P = 25
IDD2N = 34
IDD3P = 37
IDD3N = 43
IDD4W = 123
IDD4R = 135
IDD5AB = 250
IDD6x = 31
[system]
channel_size = 512
channels = 8
bus_width = 128
address_mapping = rorabgbachco
queue_structure = PER_BANK
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
unified_queue = False
[other]
epoch_period = 500000
output_level = 1
[thermal]
power_epoch_period = 10000; power epoch period (# cycle)
logic_bg_power = 5
logic_max_power = 25
chip_dim_x = 0.008; chip size in x dimension [m]
chip_dim_y = 0.008; chip size in y dimension [m]
amb_temp = 40; The ambient temperature in [C]
mat_dim_x = 1024;
mat_dim_y = 1024;
bank_order = 1; 0: x direction first, 1: y direction first
bank_layer_order = 0;
================================================
FILE: src/DRAMsim3/configs/HMC2_8GB_4Lx16.ini
================================================
[hmc]
num_links = 4
link_width = 16
link_speed = 25000
block_size = 64
xbar_queue_depth = 32
[dram_structure]
protocol = HMC
bankgroups = 1
banks_per_group = 16
rows = 65536
columns = 64
device_width = 32
num_dies = 8
[timing]
tCK = 0.8
CL = 17
CWL = 17
tRCD = 17
tRP = 17
tRAS = 34
tRFC = 420
tREFI = 9364; average periodic refresh interval, 3.9us
tRRD_S = 6
tRRD_L = 6
tWTR_S = 3
tWTR_L = 3
tFAW = 27
tWR = 19
tCCD_S = 6
tCCD_L = 6
tXS = 12
tCKSRE = 1
tXP = 8
tRTP_L = 10
tRTP_S = 10
tRTRS = 0
[power]
VDD = 1.2
IDD0 = 25
IDD2P = 17
IDD2N = 19
IDD3P = 20
IDD3N = 21
IDD4W = 61
IDD4R = 64
IDD5AB = 150
IDD6x = 21
[system]
channel_size = 256
channels = 32
bus_width = 32
address_mapping = rocorabgbach
queue_structure = PER_BANK
row_buf_policy = CLOSE_PAGE
cmd_queue_size = 8
trans_queue_size = 32
unified_queue = True
[thermal]
power_epoch_period = 10000; power epoch period (# cycle)
chip_dim_x = 0.008; chip size in x dimension [m]
chip_dim_y = 0.008; chip size in y dimension [m]
amb_temp = 40; The ambient temperature in [C]
mat_dim_x = 512;
mat_dim_y = 512;
bank_order = 1; 0: x direction first, 1: y direction first
bank_layer_order = 0;
[other]
epoch_period = 1250000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/HMC_2GB_4Lx16.ini
================================================
[hmc]
num_links = 4
link_width = 16
link_speed = 10000
block_size = 64
xbar_queue_depth = 6
[dram_structure]
protocol = HMC
bankgroups = 1
banks_per_group = 8
rows = 65536
columns = 64
device_width = 32
num_dies = 4
[timing]
tCK = 0.8
CL = 17
CWL = 17
tRCD = 17
tRP = 17
tRAS = 34
tRFC = 420
tREFI = 9364; average periodic refresh interval, 3.9us
tRRD_S = 4
tRRD_L = 4
tWTR_S = 3
tWTR_L = 3
tFAW = 27
tWR = 17
tCCD_S = 6
tCCD_L = 6
tXS = 12
tCKSRE = 1
tXP = 8
tRTP_L = 8
tRTP_S = 8
tRTRS = 0
[power]
VDD = 1.2
IDD0 = 25
IDD2P = 17
IDD2N = 19
IDD3P = 20
IDD3N = 21
IDD4W = 61
IDD4R = 64
IDD5AB = 150
IDD6x = 21
[system]
channel_size = 128
channels = 16
bus_width = 32
address_mapping = rocorabgbach
queue_structure = PER_BANK
row_buf_policy = CLOSE_PAGE
cmd_queue_size = 8
trans_queue_size = 32
unified_queue = True
[other]
epoch_period = 1250000
output_level = 1
[thermal]
power_epoch_period = 10000; power epoch period (# cycle)
chip_dim_x = 0.008; chip size in x dimension [m]
chip_dim_y = 0.008; chip size in y dimension [m]
amb_temp = 40; The ambient temperature in [C]
mat_dim_x = 512;
mat_dim_y = 512;
bank_order = 1; 0: x direction first, 1: y direction first
bank_layer_order = 0;
================================================
FILE: src/DRAMsim3/configs/HMC_2GB_4Lx16_dummy.ini
================================================
[hmc]
num_links = 4
link_width = 16
link_speed = 10000
block_size = 128
xbar_queue_depth = 6
[dram_structure]
protocol = HMC
bankgroups = 1
banks_per_group = 8
rows = 65536
columns = 64
device_width = 32
BL = 2
num_dies = 4
[timing]
tCK = 0.8
CL = 17
CWL = 17
tRCD = 17
tRP = 17
tRAS = 34
tRFC = 420
tREFI = 9364; average periodic refresh interval, 3.9us
tRRD_S = 4
tRRD_L = 4
tWTR_S = 3
tWTR_L = 3
tFAW = 27
tWR = 17
tCCD_S = 6
tCCD_L = 6
tXS = 12
tCKSRE = 1
tXP = 8
tRTP_L = 8
tRTP_S = 8
tRTRS = 0
[power]
VDD = 1.2
IDD0 = 25
IDD2P = 17
IDD2N = 19
IDD3P = 20
IDD3N = 21
IDD4W = 61
IDD4R = 64
IDD5AB = 150
IDD6x = 21
[system]
channel_size = 128
channels = 16
bus_width = 32
address_mapping = rocorabgbach
queue_structure = PER_BANK
row_buf_policy = CLOSE_PAGE
cmd_queue_size = 8
trans_queue_size = 32
unified_queue = True
[other]
epoch_period = 1250000
output_level = 1
[thermal]
power_epoch_period = 10000; power epoch period (# cycle)
chip_dim_x = 0.008; chip size in x dimension [m]
chip_dim_y = 0.008; chip size in y dimension [m]
amb_temp = 40; The ambient temperature in [C]
mat_dim_x = 512;
mat_dim_y = 512;
bank_order = 1; 0: x direction first, 1: y direction first
bank_layer_order = 0;
================================================
FILE: src/DRAMsim3/configs/HMC_4GB_4Lx16.ini
================================================
[hmc]
num_links = 4
link_width = 16
link_speed = 15000
block_size = 64
xbar_queue_depth = 6
[dram_structure]
protocol = HMC
bankgroups = 1
banks_per_group = 16
rows = 65536
columns = 64
device_width = 32
num_dies = 4
[timing]
tCK = 0.8
CL = 17
CWL = 17
tRCD = 17
tRP = 17
tRAS = 34
tRFC = 420
tREFI = 9364; average periodic refresh interval, 3.9us
tRRD_S = 4
tRRD_L = 4
tWTR_S = 3
tWTR_L = 3
tFAW = 27
tWR = 17
tCCD_S = 6
tCCD_L = 6
tXS = 12
tCKSRE = 1
tXP = 8
tRTP_L = 8
tRTP_S = 8
tRTRS = 0
[power]
VDD = 1.2
IDD0 = 25
IDD2P = 17
IDD2N = 19
IDD3P = 20
IDD3N = 21
IDD4W = 61
IDD4R = 64
IDD5AB = 150
IDD6x = 21
[system]
channel_size = 256
channels = 16
bus_width = 32
address_mapping = rocorabgbach
queue_structure = PER_BANK
row_buf_policy = CLOSE_PAGE
cmd_queue_size = 8
trans_queue_size = 32
unified_queue = True
[other]
epoch_period = 1250000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/LPDDR3_8Gb_x32_1333.ini
================================================
[dram_structure]
protocol = LPDDR3
bankgroups = 1
banks_per_group = 8
rows = 32768
columns = 1024
device_width = 32
BL = 8
[timing]
tCK = 1.5
AL = 0
CL = 10
CWL = 8
tRCD = 12
tRP = 12
tRAS = 28
tRFC = 140
tRFCb = 60
tRFC2 = 140
tRFC4 = 140
REFI = 2600
tREFIb = 325
tRPRE = 1
tWPRE = 1
tRRD_S = 7
tRRD_L = 7
tWTR_S = 5
tWTR_L = 5
tFAW = 34
tWR = 10
tWR2 = 10
tRTP = 5
tCCD_S = 4
tCCD_L = 4
tCKE = 5
tCKESR = 10
tXS = 147
tXP = 5
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 40.0
IPP0 = 0
IDD2P = 1.3
IDD2N = 20.0
IDD3P = 7
IDD3N = 20.5
IDD4W = 215
IDD4R = 220
IDD5AB = 150
IDD6x = 20.5
[system]
channel_size = 2048
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 666666
output_level = 1
================================================
FILE: src/DRAMsim3/configs/LPDDR3_8Gb_x32_1600.ini
================================================
[dram_structure]
protocol = LPDDR3
bankgroups = 1
banks_per_group = 8
rows = 32768
columns = 1024
device_width = 32
BL = 8
[timing]
tCK = 1.25
AL = 0
CL = 12
CWL = 9
tRCD = 15
tRP = 15
tRAS = 34
tRFC = 168
tRFCb = 72
tRFC2 = 168
tRFC4 = 168
REFI = 3120
tREFIb = 390
tRPRE = 1
tWPRE = 1
tRRD_S = 8
tRRD_L = 8
tWTR_S = 6
tWTR_L = 6
tFAW = 40
tWR = 12
tWR2 = 12
tRTP = 6
tCCD_S = 4
tCCD_L = 4
tCKE = 6
tCKESR = 12
tXS = 176
tXP = 6
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 40.0
IPP0 = 0
IDD2P = 1.3
IDD2N = 20.5
IDD3P = 7
IDD3N = 21.0
IDD4W = 245
IDD4R = 250
IDD5AB = 150
IDD6x = 21.0
[system]
channel_size = 2048
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 800000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/LPDDR3_8Gb_x32_1866.ini
================================================
[dram_structure]
protocol = LPDDR3
bankgroups = 1
banks_per_group = 8
rows = 32768
columns = 1024
device_width = 32
BL = 8
[timing]
tCK = 1.07
AL = 0
CL = 14
CWL = 11
tRCD = 17
tRP = 17
tRAS = 40
tRFC = 196
tRFCb = 85
tRFC2 = 196
tRFC4 = 196
REFI = 3645
tREFIb = 456
tRPRE = 1
tWPRE = 1
tRRD_S = 10
tRRD_L = 10
tWTR_S = 7
tWTR_L = 7
tFAW = 47
tWR = 15
tWR2 = 15
tRTP = 7
tCCD_S = 4
tCCD_L = 4
tCKE = 7
tCKESR = 15
tXS = 206
tXP = 7
tRTRS = 1
[power]
VDD = 1.2
IDD0 = 41.5
IPP0 = 0
IDD2P = 1.3
IDD2N = 21.5
IDD3P = 7
IDD3N = 22.0
IDD4W = 285
IDD4R = 290
IDD5AB = 150
IDD6x = 22.0
[system]
channel_size = 2048
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 934579
output_level = 1
================================================
FILE: src/DRAMsim3/configs/LPDDR4_8Gb_x16_2400.ini
================================================
[dram_structure]
protocol = LPDDR4
bankgroups = 2
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 16
BL = 16
[timing]
tCK = 0.83
AL = 0
CL = 17
CWL = 14
tRCD = 15
tRP = 15
tRAS = 32
tRFC = 392
tRFC2 = 268
tRFC4 = 172
tREFI = 8660
tRPRE = 1
tWPRE = 1
tRRD_S = 8
tRRD_L = 8
tWTR_S = 8
tWTR_L = 16
tFAW = 32
tWR = 30
tWR2 = 32
tRTP = 12
tCCD_S = 4
tCCD_L = 6
tCKE = 6
tCKESR = 7
tXS = 432
tXP = 6
tRTRS = 1
tPPD = 2
[power]
VDD = 1.2
IDD0 = 80
IPP0 = 4.0
IDD2P = 25
IDD2N = 34
IDD3P = 41
IDD3N = 47
IDD4W = 228
IDD4R = 243
IDD5AB = 280
IDD6x = 30
[system]
channel_size = 8192
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
refresh_policy = RANK_LEVEL_STAGGERED
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 1204819
output_level = 1
================================================
FILE: src/DRAMsim3/configs/ST-1.2x.ini
================================================
; (C) Copyright 2006-2018 Barcelona Supercomputing Center (BSC)
;
;The copyright holder is BSC-CNS, and the authorship correspond to Kazi Asifuzzaman, Rommel Sanchez Verdejo, and Petar Radojkovic. The complete explanation of the derivation of the data can be found in the following study: Kazi Asifuzzaman, Rommel Sanchez Verdejo, and Petar Radojkovic. 2017. Enabling a reliable STT-MRAM main memory simulation. In Proceedings of the International Symposium on Memory Systems (MEMSYS '17). Washington DC, USA, 283-292. DOI: https://doi.org/10.1145/3132402.3132416
;Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
;1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
;2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
;THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.”
; This configuration lists detailed timing parameters for STT-MRAM main memory, specifying a 1.2x deviation from respective DRAM timing parameters. Please note, the current parameters (IDD0, IDD1.. etc) DOES NOT correspond to STT-MRAM and should not be used for current/energy estimations.
[dram_structure]
protocol = DDR3 ; it's STT-MRAM, but using DDR3 protocol
bankgroups = 1
banks_per_group = 8
rows = 32768
columns = 1024
device_width = 8
BL=4
[timing]
tCK = 1.25;
CL = 11;
CWL = 11
AL = 0;
tRCDRD=14
tRCDWR=14
tRP=14
tRAS=20
tRFC = 1
tREFI = 6240
tRRD_S = 6
tRRD_L = 6
tWTR_S = 2
tWTR_L = 2
tFAW = 29
tWR = 12
tCCD_S = 4
tCCD_L = 4
tCKE = 4
tXP = 5
tRTP_L = 6
tRTP_S = 6
; tRC=34
tRTRS=1
; The following current parameters DOES NOT correspond to STT-MRAM, and should not be used used for current/energy estimations.
[power]
VDD = 1.5
IDD0=1305;
IDD1=1395;
IDD2P=846;
IDD2Q=1030;
IDD2N=1050;
IDD3Pf=60;
IDD3Ps=60;
IDD3N=1310;
IDD4W=1765;
IDD4R=230;
IDD5=1940;
IDD6=246;
IDD6L=246;
IDD7=2160;
[system]
channel_size = 4096
channels = 1
bus_width = 64
address_mapping = rorabgbachco
queue_structure = PER_RANK
row_buf_policy = OPEN_PAGE
cmd_queue_size = 16
trans_queue_size = 32
[other]
epoch_period = 100000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/ST-1.5x.ini
================================================
; (C) Copyright 2006-2018 Barcelona Supercomputing Center (BSC)
;
;The copyright holder is BSC-CNS, and the authorship correspond to Kazi Asifuzzaman, Rommel Sanchez Verdejo, and Petar Radojkovic. The complete explanation of the derivation of the data can be found in the following study: Kazi Asifuzzaman, Rommel Sanchez Verdejo, and Petar Radojkovic. 2017. Enabling a reliable STT-MRAM main memory simulation. In Proceedings of the International Symposium on Memory Systems (MEMSYS '17). Washington DC, USA, 283-292. DOI: https://doi.org/10.1145/3132402.3132416
;Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
;1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
;2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
;THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.”
; This configuration lists detailed timing parameters for STT-MRAM main memory, specifying a 1.5x deviation from respective DRAM timing parameters. Please note, the current parameters (IDD0, IDD1.. etc) DOES NOT correspond to STT-MRAM and should not be used for current/energy estimations.
[dram_structure]
protocol = DDR3 ; it's STT-MRAM, but using DDR3 protocol
bankgroups = 1
banks_per_group = 8
rows = 32768
columns = 1024
device_width = 8
BL=4
[timing]
tCK = 1.25;
CL = 11;
CWL = 11
AL = 0;
tRCDRD=17
tRCDWR=17
tRP=17
tRAS=23
tRFC = 1
tREFI = 6240
tRRD_S = 8
tRRD_L = 8
tWTR_S = 6
tWTR_L = 6
tFAW = 36
tWR = 12
tCCD_S = 4
tCCD_L = 4
tCKE = 4
tXP = 5
tRTP_L = 6
tRTP_S = 6
; tRC=40
tRTRS=1
REFRESH_PERIOD=7800;
; The following current parameters DOES NOT correspond to STT-MRAM, and should not be used used for current/energy estimations.
[power]
VDD=1.5
IDD0=1305;
IDD1=1395;
IDD2P=846;
IDD2Q=1030;
IDD2N=1050;
IDD3Pf=60;
IDD3Ps=60;
IDD3N=1310;
IDD4W=1765;
IDD4R=230;
IDD5=1940;
IDD6=246;
IDD6L=246;
IDD7=2160;
[system]
channel_size = 4096
channels = 1
bus_width = 64
address_mapping = rorabgbachco
queue_structure = PER_RANK
row_buf_policy = OPEN_PAGE
cmd_queue_size = 16
trans_queue_size = 32
[other]
epoch_period = 100000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/ST-2.0x.ini
================================================
; (C) Copyright 2006-2018 Barcelona Supercomputing Center (BSC)
;
;The copyright holder is BSC-CNS, and the authorship correspond to Kazi Asifuzzaman, Rommel Sanchez Verdejo, and Petar Radojkovic. The complete explanation of the derivation of the data can be found in the following study: Kazi Asifuzzaman, Rommel Sanchez Verdejo, and Petar Radojkovic. 2017. Enabling a reliable STT-MRAM main memory simulation. In Proceedings of the International Symposium on Memory Systems (MEMSYS '17). Washington DC, USA, 283-292. DOI: https://doi.org/10.1145/3132402.3132416
;Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
;1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
;2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
;THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.”
; This configuration lists detailed timing parameters for STT-MRAM main memory, specifying a 2x deviation from respective DRAM timing parameters. Please note, the current parameters (IDD0, IDD1.. etc) DOES NOT correspond to STT-MRAM and should not be used for current/energy estimations.
[dram_structure]
protocol = DDR3 ; it's STT-MRAM, but using DDR3 protocol
bankgroups = 1
banks_per_group = 8
rows = 32768
columns = 1024
device_width = 8
BL=4
[timing]
tCK = 1.25;
CL = 11;
CWL = 11
AL = 0;
tRCDRD=22
tRCDWR=22
tRP=22
tRAS=28
tRFC = 1
tREFI = 6240
tRRD_S = 10
tRRD_L = 10
tWTR_S = 6
tWTR_L = 6
tFAW = 36
tWR = 48
tCCD_S = 4
tCCD_L = 4
tCKE = 4
tXP = 5
tRTP_L = 6
tRTP_S = 6
; tRC=50
tRTRS=1
REFRESH_PERIOD=7800
; The following current parameters DOES NOT correspond to STT-MRAM, and should not be used used for current/energy estimations.
[power]
VDD=1.5;
IDD0=1305;
IDD1=1395;
IDD2P=846;
IDD2Q=1030;
IDD2N=1050;
IDD3Pf=60;
IDD3Ps=60;
IDD3N=1310;
IDD4W=1765;
IDD4R=230;
IDD5=1940;
IDD6=246;
IDD6L=246;
IDD7=2160;
[system]
channel_size = 4096
channels = 1
bus_width = 64
address_mapping = rorabgbachco
queue_structure = PER_RANK
row_buf_policy = OPEN_PAGE
cmd_queue_size = 16
trans_queue_size = 32
[other]
epoch_period = 100000
output_level = 1
================================================
FILE: src/DRAMsim3/configs/ddr3_debug.ini
================================================
[dram_structure]
protocol = DDR3
bankgroups = 1
banks_per_group = 8
rows = 16384
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 1.5
AL = 0
CL = 10
CWL = 7
tRCD = 10
tRP = 10
tRAS = 24
tRFC = 74
tREFI = 5200
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tWTR_S = 5
tFAW = 20
tWR = 10
tCCD_S = 4
tRTP = 5
tCKE = 4
tCKESR = 1
tXS = 81
tXP = 5
tRTRS = 1
[power]
VDD = 1.35
IDD0 = 33
IDD2P = 12
IDD2N = 17
IDD3P = 14
IDD3N = 23
IDD4W = 77
IDD4R = 72
IDD5AB = 155
IDD6x = 12
[system]
channel_size = 2048
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
epoch_period = 666666
output_level = 1
================================================
FILE: src/DRAMsim3/configs/ddr4_debug.ini
================================================
[dram_structure]
protocol = DDR4
bankgroups = 4
banks_per_group = 4
rows = 65536
columns = 1024
device_width = 8
BL = 8
[timing]
tCK = 0.833
AL = 0
CL = 16
CWL = 16
tRCD = 16
tRP = 16
tRAS = 39
tRFC = 420
tRFC2 = 312
tRFC4 = 192
tREFI = 9364
tRPRE = 1
tWPRE = 1
tRRD_S = 4
tRRD_L = 6
tWTR_S = 3
tWTR_L = 9
tFAW = 26
tWR = 19
tWR2 = 1
tCCD_S = 4
tCCD_L = 6
tXS = 12
tCKSRE = 12
tXP = 8
tRFCb = 20
tREFIb = 1950
activation_window_depth = 4
tRREFD = 5
tRTRS = 2
tRTP = 10
tCAS = 3
tCWD = 3
[power]
VDD = 1.2
IDD0 = 48
IDD2P = 25
IDD2N = 34
IDD3P = 37
IDD3N = 44.0
IDD4W = 123
IDD4R = 135
IDD5AB = 250
IDD6x = 31
[system]
channel_size = 16384
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
validation_output = ddr4_verification.log
epoch_period = 1200480
output_level = 1
================================================
FILE: src/DRAMsim3/configs/lpddr_2Gb_x16.ini
================================================
[dram_structure]
protocol = LPDDR
bankgroups = 1
banks_per_group = 4
rows = 16384
columns = 2048
device_width = 16
BL = 8
[timing]
tCK = 4.8
AL = 0
CL = 3
CWL = 3
tRCD = 4
tRP = 3
tRAS = 9
tRFC = 15
tREFI = 1625
tRPRE = 1
tWPRE = 1
tRRD_L = 3
tWTR_L = 2
tFAW = 4
tWR = 3
tCCD_L = 0
tRTP = 0
tXP = 2
tCKE = 1
tRTRS = 1
tCMD = 1
activation_window_depth = 4
[system]
channel_size = 1024
channels = 1
bus_width = 64
address_mapping = rochrababgco
queue_structure = PER_BANK
row_buf_policy = OPEN_PAGE
cmd_queue_size = 8
trans_queue_size = 32
[other]
validation_output = lpddr_verification.log
epoch_period = 208333
output_level = 1
[thermal]
power_epoch_period = 10000; power epoch period (# cycle)
chip_dim_x = 0.008; chip size in x dimension [m]
chip_dim_y = 0.008; chip size in y dimension [m]
amb_temp = 40; The ambient temperature in [C]
mat_dim_x = 512;
mat_dim_y = 512;
bank_order = 1; 0: x direction first, 1: y direction first
================================================
FILE: src/DRAMsim3/ext/fmt/LICENSE.rst
================================================
Copyright (c) 2012 - 2016, Victor Zverovich
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: src/DRAMsim3/ext/fmt/include/fmt/core.h
================================================
// Formatting library for C++ - the core API
//
// Copyright (c) 2012 - present, Victor Zverovich
// All rights reserved.
//
// For the license information refer to format.h.
#ifndef FMT_CORE_H_
#define FMT_CORE_H_
#include <cassert>
#include <cstdio> // std::FILE
#include <cstring>
#include <iterator>
#include <string>
#include <type_traits>
// The fmt library version in the form major * 10000 + minor * 100 + patch.
#define FMT_VERSION 50202
#ifdef __has_feature
# define FMT_HAS_FEATURE(x) __has_feature(x)
#else
# define FMT_HAS_FEATURE(x) 0
#endif
#if defined(__has_include) && !defined(__INTELLISENSE__) && \
!(defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1600)
# define FMT_HAS_INCLUDE(x) __has_include(x)
#else
# define FMT_HAS_INCLUDE(x) 0
#endif
#ifdef __has_cpp_attribute
# define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
#else
# define FMT_HAS_CPP_ATTRIBUTE(x) 0
#endif
#if defined(__GNUC__) && !defined(__clang__)
# define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
#else
# define FMT_GCC_VERSION 0
#endif
#if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
# define FMT_HAS_GXX_CXX11 FMT_GCC_VERSION
#else
# define FMT_HAS_GXX_CXX11 0
#endif
#ifdef _MSC_VER
# define FMT_MSC_VER _MSC_VER
#else
# define FMT_MSC_VER 0
#endif
// Check if relaxed C++14 constexpr is supported.
// GCC doesn't allow throw in constexpr until version 6 (bug 67371).
#ifndef FMT_USE_CONSTEXPR
# define FMT_USE_CONSTEXPR \
(FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VER >= 1910 || \
(FMT_GCC_VERSION >= 600 && __cplusplus >= 201402L))
#endif
#if FMT_USE_CONSTEXPR
# define FMT_CONSTEXPR constexpr
# define FMT_CONSTEXPR_DECL constexpr
#else
# define FMT_CONSTEXPR inline
# define FMT_CONSTEXPR_DECL
#endif
#ifndef FMT_USE_CONSTEXPR11
# define FMT_USE_CONSTEXPR11 \
(FMT_USE_CONSTEXPR || FMT_GCC_VERSION >= 406 || FMT_MSC_VER >= 1900)
#endif
#if FMT_USE_CONSTEXPR11
# define FMT_CONSTEXPR11 constexpr
#else
# define FMT_CONSTEXPR11
#endif
#ifndef FMT_OVERRIDE
# if FMT_HAS_FEATURE(cxx_override) || \
(FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1900
# define FMT_OVERRIDE override
# else
# define FMT_OVERRIDE
# endif
#endif
#if FMT_HAS_FEATURE(cxx_explicit_conversions) || \
FMT_GCC_VERSION >= 405 || FMT_MSC_VER >= 1800
# define FMT_USE_EXPLICIT 1
# define FMT_EXPLICIT explicit
#else
# define FMT_USE_EXPLICIT 0
# define FMT_EXPLICIT
#endif
#ifndef FMT_NULL
# if FMT_HAS_FEATURE(cxx_nullptr) || \
(FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1600
# define FMT_NULL nullptr
# define FMT_USE_NULLPTR 1
# else
# define FMT_NULL NULL
# endif
#endif
#ifndef FMT_USE_NULLPTR
# define FMT_USE_NULLPTR 0
#endif
// Check if exceptions are disabled.
#if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || \
FMT_MSC_VER && !_HAS_EXCEPTIONS
# define FMT_EXCEPTIONS 0
#else
# define FMT_EXCEPTIONS 1
#endif
// Define FMT_USE_NOEXCEPT to make fmt use noexcept (C++11 feature).
#ifndef FMT_USE_NOEXCEPT
# define FMT_USE_NOEXCEPT 0
#endif
#if FMT_USE_NOEXCEPT || FMT_HAS_FEATURE(cxx_noexcept) || \
(FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1900
# define FMT_DETECTED_NOEXCEPT noexcept
# define FMT_HAS_CXX11_NOEXCEPT 1
#else
# define FMT_DETECTED_NOEXCEPT throw()
# define FMT_HAS_CXX11_NOEXCEPT 0
#endif
#ifndef FMT_NOEXCEPT
# if FMT_EXCEPTIONS || FMT_HAS_CXX11_NOEXCEPT
# define FMT_NOEXCEPT FMT_DETECTED_NOEXCEPT
# else
# define FMT_NOEXCEPT
# endif
#endif
#ifndef FMT_BEGIN_NAMESPACE
# if FMT_HAS_FEATURE(cxx_inline_namespaces) || FMT_GCC_VERSION >= 404 || \
FMT_MSC_VER >= 1900
# define FMT_INLINE_NAMESPACE inline namespace
# define FMT_END_NAMESPACE }}
# else
# define FMT_INLINE_NAMESPACE namespace
# define FMT_END_NAMESPACE } using namespace v5; }
# endif
# define FMT_BEGIN_NAMESPACE namespace fmt { FMT_INLINE_NAMESPACE v5 {
#endif
#if !defined(FMT_HEADER_ONLY) && defined(_WIN32)
# ifdef FMT_EXPORT
# define FMT_API __declspec(dllexport)
# elif defined(FMT_SHARED)
# define FMT_API __declspec(dllimport)
# endif
#endif
#ifndef FMT_API
# define FMT_API
#endif
#ifndef FMT_ASSERT
# define FMT_ASSERT(condition, message) assert((condition) && message)
#endif
// libc++ supports string_view in pre-c++17.
#if (FMT_HAS_INCLUDE(<string_view>) && \
(__cplusplus > 201402L || defined(_LIBCPP_VERSION))) || \
(defined(_MSVC_LANG) && _MSVC_LANG > 201402L && _MSC_VER >= 1910)
# include <string_view>
# define FMT_STRING_VIEW std::basic_string_view
#elif FMT_HAS_INCLUDE(<experimental/string_view>) && __cplusplus >= 201402L
# include <experimental/string_view>
# define FMT_STRING_VIEW std::experimental::basic_string_view
#endif
// std::result_of is defined in <functional> in gcc 4.4.
#if FMT_GCC_VERSION && FMT_GCC_VERSION <= 404
# include <functional>
#endif
FMT_BEGIN_NAMESPACE
namespace internal {
// An implementation of declval for pre-C++11 compilers such as gcc 4.
template <typename T>
typename std::add_rvalue_reference<T>::type declval() FMT_NOEXCEPT;
template <typename>
struct result_of;
template <typename F, typename... Args>
struct result_of<F(Args...)> {
// A workaround for gcc 4.4 that doesn't allow F to be a reference.
typedef typename std::result_of<
typename std::remove_reference<F>::type(Args...)>::type type;
};
// Casts nonnegative integer to unsigned.
template <typename Int>
FMT_CONSTEXPR typename std::make_unsigned<Int>::type to_unsigned(Int value) {
FMT_ASSERT(value >= 0, "negative value");
return static_cast<typename std::make_unsigned<Int>::type>(value);
}
/** A contiguous memory buffer with an optional growing ability. */
template <typename T>
class basic_buffer {
private:
basic_buffer(const basic_buffer &) = delete;
void operator=(const basic_buffer &) = delete;
T *ptr_;
std::size_t size_;
std::size_t capacity_;
protected:
// Don't initialize ptr_ since it is not accessed to save a few cycles.
basic_buffer(std::size_t sz) FMT_NOEXCEPT: size_(sz), capacity_(sz) {}
basic_buffer(T *p = FMT_NULL, std::size_t sz = 0, std::size_t cap = 0)
FMT_NOEXCEPT: ptr_(p), size_(sz), capacity_(cap) {}
/** Sets the buffer data and capacity. */
void set(T *buf_data, std::size_t buf_capacity) FMT_NOEXCEPT {
ptr_ = buf_data;
capacity_ = buf_capacity;
}
/** Increases the buffer capacity to hold at least *capacity* elements. */
virtual void grow(std::size_t capacity) = 0;
public:
typedef T value_type;
typedef const T &const_reference;
virtual ~basic_buffer() {}
T *begin() FMT_NOEXCEPT { return ptr_; }
T *end() FMT_NOEXCEPT { return ptr_ + size_; }
/** Returns the size of this buffer. */
std::size_t size() const FMT_NOEXCEPT { return size_; }
/** Returns the capacity of this buffer. */
std::size_t capacity() const FMT_NOEXCEPT { return capacity_; }
/** Returns a pointer to the buffer data. */
T *data() FMT_NOEXCEPT { return ptr_; }
/** Returns a pointer to the buffer data. */
const T *data() const FMT_NOEXCEPT { return ptr_; }
/**
Resizes the buffer. If T is a POD type new elements may not be initialized.
*/
void resize(std::size_t new_size) {
reserve(new_size);
size_ = new_size;
}
/** Clears this buffer. */
void clear() { size_ = 0; }
/** Reserves space to store at least *capacity* elements. */
void reserve(std::size_t new_capacity) {
if (new_capacity > capacity_)
grow(new_capacity);
}
void push_back(const T &value) {
reserve(size_ + 1);
ptr_[size_++] = value;
}
/** Appends data to the end of the buffer. */
template <typename U>
void append(const U *begin, const U *end);
T &operator[](std::size_t index) { return ptr_[index]; }
const T &operator[](std::size_t index) const { return ptr_[index]; }
};
typedef basic_buffer<char> buffer;
typedef basic_buffer<wchar_t> wbuffer;
// A container-backed buffer.
template <typename Container>
class container_buffer : public basic_buffer<typename Container::value_type> {
private:
Container &container_;
protected:
void grow(std::size_t capacity) FMT_OVERRIDE {
container_.resize(capacity);
this->set(&container_[0], capacity);
}
public:
explicit container_buffer(Container &c)
: basic_buffer<typename Container::value_type>(c.size()), container_(c) {}
};
// Extracts a reference to the container from back_insert_iterator.
template <typename Container>
inline Container &get_container(std::back_insert_iterator<Container> it) {
typedef std::back_insert_iterator<Container> bi_iterator;
struct accessor: bi_iterator {
accessor(bi_iterator iter) : bi_iterator(iter) {}
using bi_iterator::container;
};
return *accessor(it).container;
}
struct error_handler {
FMT_CONSTEXPR error_handler() {}
FMT_CONSTEXPR error_handler(const error_handler &) {}
// This function is intentionally not constexpr to give a compile-time error.
FMT_API void on_error(const char *message);
};
template <typename T>
struct no_formatter_error : std::false_type {};
} // namespace internal
#if FMT_GCC_VERSION && FMT_GCC_VERSION < 405
template <typename... T>
struct is_constructible: std::false_type {};
#else
template <typename... T>
struct is_constructible : std::is_constructible<T...> {};
#endif
/**
An implementation of ``std::basic_string_view`` for pre-C++17. It provides a
subset of the API. ``fmt::basic_string_view`` is used for format strings even
if ``std::string_view`` is available to prevent issues when a library is
compiled with a different ``-std`` option than the client code (which is not
recommended).
*/
template <typename Char>
class basic_string_view {
private:
const Char *data_;
size_t size_;
public:
typedef Char char_type;
typedef const Char *iterator;
FMT_CONSTEXPR basic_string_view() FMT_NOEXCEPT : data_(FMT_NULL), size_(0) {}
/** Constructs a string reference object from a C string and a size. */
FMT_CONSTEXPR basic_string_view(const Char *s, size_t count) FMT_NOEXCEPT
: data_(s), size_(count) {}
/**
\rst
Constructs a string reference object from a C string computing
the size with ``std::char_traits<Char>::length``.
\endrst
*/
basic_string_view(const Char *s)
: data_(s), size_(std::char_traits<Char>::length(s)) {}
/** Constructs a string reference from a ``std::basic_string`` object. */
template <typename Alloc>
FMT_CONSTEXPR basic_string_view(
const std::basic_string<Char, Alloc> &s) FMT_NOEXCEPT
: data_(s.data()), size_(s.size()) {}
#ifdef FMT_STRING_VIEW
FMT_CONSTEXPR basic_string_view(FMT_STRING_VIEW<Char> s) FMT_NOEXCEPT
: data_(s.data()), size_(s.size()) {}
#endif
/** Returns a pointer to the string data. */
FMT_CONSTEXPR const Char *data() const { return data_; }
/** Returns the string size. */
FMT_CONSTEXPR size_t size() const { return size_; }
FMT_CONSTEXPR iterator begin() const { return data_; }
FMT_CONSTEXPR iterator end() const { return data_ + size_; }
FMT_CONSTEXPR void remove_prefix(size_t n) {
data_ += n;
size_ -= n;
}
// Lexicographically compare this string reference to other.
int compare(basic_string_view other) const {
size_t str_size = size_ < other.size_ ? size_ : other.size_;
int result = std::char_traits<Char>::compare(data_, other.data_, str_size);
if (result == 0)
result = size_ == other.size_ ? 0 : (size_ < other.size_ ? -1 : 1);
return result;
}
friend bool operator==(basic_string_view lhs, basic_string_view rhs) {
return lhs.compare(rhs) == 0;
}
friend bool operator!=(basic_string_view lhs, basic_string_view rhs) {
return lhs.compare(rhs) != 0;
}
friend bool operator<(basic_string_view lhs, basic_string_view rhs) {
return lhs.compare(rhs) < 0;
}
friend bool operator<=(basic_string_view lhs, basic_string_view rhs) {
return lhs.compare(rhs) <= 0;
}
friend bool operator>(basic_string_view lhs, basic_string_view rhs) {
return lhs.compare(rhs) > 0;
}
friend bool operator>=(basic_string_view lhs, basic_string_view rhs) {
return lhs.compare(rhs) >= 0;
}
};
typedef basic_string_view<char> string_view;
typedef basic_string_view<wchar_t> wstring_view;
/**
\rst
The function ``to_string_view`` adapts non-intrusively any kind of string or
string-like type if the user provides a (possibly templated) overload of
``to_string_view`` which takes an instance of the string class
``StringType<Char>`` and returns a ``fmt::basic_string_view<Char>``.
The conversion function must live in the very same namespace as
``StringType<Char>`` to be picked up by ADL. Non-templated string types
like f.e. QString must return a ``basic_string_view`` with a fixed matching
char type.
**Example**::
namespace my_ns {
inline string_view to_string_view(const my_string &s) {
return { s.data(), s.length() };
}
}
std::string message = fmt::format(my_string("The answer is {}"), 42);
\endrst
*/
template <typename Char>
inline basic_string_view<Char>
to_string_view(basic_string_view<Char> s) { return s; }
template <typename Char>
inline basic_string_view<Char>
to_string_view(const std::basic_string<Char> &s) { return s; }
template <typename Char>
inline basic_string_view<Char> to_string_view(const Char *s) { return s; }
#ifdef FMT_STRING_VIEW
template <typename Char>
inline basic_string_view<Char>
to_string_view(FMT_STRING_VIEW<Char> s) { return s; }
#endif
// A base class for compile-time strings. It is defined in the fmt namespace to
// make formatting functions visible via ADL, e.g. format(fmt("{}"), 42).
struct compile_string {};
template <typename S>
struct is_compile_string : std::is_base_of<compile_string, S> {};
template <
typename S,
typename Enable = typename std::enable_if<is_compile_string<S>::value>::type>
FMT_CONSTEXPR basic_string_view<typename S::char_type>
to_string_view(const S &s) { return s; }
template <typename Context>
class basic_format_arg;
template <typename Context>
class basic_format_args;
// A formatter for objects of type T.
template <typename T, typename Char = char, typename Enable = void>
struct formatter {
static_assert(internal::no_formatter_error<T>::value,
"don't know how to format the type, include fmt/ostream.h if it provides "
"an operator<< that should be used");
// The following functions are not defined intentionally.
template <typename ParseContext>
typename ParseContext::iterator parse(ParseContext &);
template <typename FormatContext>
auto format(const T &val, FormatContext &ctx) -> decltype(ctx.out());
};
template <typename T, typename Char, typename Enable = void>
struct convert_to_int: std::integral_constant<
bool, !std::is_arithmetic<T>::value && std::is_convertible<T, int>::value> {};
namespace internal {
struct dummy_string_view { typedef void char_type; };
dummy_string_view to_string_view(...);
using fmt::v5::to_string_view;
// Specifies whether S is a string type convertible to fmt::basic_string_view.
template <typename S>
struct is_string : std::integral_constant<bool, !std::is_same<
dummy_string_view, decltype(to_string_view(declval<S>()))>::value> {};
template <typename S>
struct char_t {
typedef decltype(to_string_view(declval<S>())) result;
typedef typename result::char_type type;
};
template <typename Char>
struct named_arg_base;
template <typename T, typename Char>
struct named_arg;
enum type {
none_type, named_arg_type,
// Integer types should go first,
int_type, uint_type, long_long_type, ulong_long_type, bool_type, char_type,
last_integer_type = char_type,
// followed by floating-point types.
double_type, long_double_type, last_numeric_type = long_double_type,
cstring_type, string_type, pointer_type, custom_type
};
FMT_CONSTEXPR bool is_integral(type t) {
FMT_ASSERT(t != internal::named_arg_type, "invalid argument type");
return t > internal::none_type && t <= internal::last_integer_type;
}
FMT_CONSTEXPR bool is_arithmetic(type t) {
FMT_ASSERT(t != internal::named_arg_type, "invalid argument type");
return t > internal::none_type && t <= internal::last_numeric_type;
}
template <typename Char>
struct string_value {
const Char *value;
std::size_t size;
};
template <typename Context>
struct custom_value {
const void *value;
void (*format)(const void *arg, Context &ctx);
};
// A formatting argument value.
template <typename Context>
class value {
public:
typedef typename Context::char_type char_type;
union {
int int_value;
unsigned uint_value;
long long long_long_value;
unsigned long long ulong_long_value;
double double_value;
long double long_double_value;
const void *pointer;
string_value<char_type> string;
string_value<signed char> sstring;
string_value<unsigned char> ustring;
custom_value<Context> custom;
};
FMT_CONSTEXPR value(int val = 0) : int_value(val) {}
value(unsigned val) { uint_value = val; }
value(long long val) { long_long_value = val; }
value(unsigned long long val) { ulong_long_value = val; }
value(double val) { double_value = val; }
value(long double val) { long_double_value = val; }
value(const char_type *val) { string.value = val; }
value(const signed char *val) {
static_assert(std::is_same<char, char_type>::value,
"incompatible string types");
sstring.value = val;
}
value(const unsigned char *val) {
static_assert(std::is_same<char, char_type>::value,
"incompatible string types");
ustring.value = val;
}
value(basic_string_view<char_type> val) {
string.value = val.data();
string.size = val.size();
}
value(const void *val) { pointer = val; }
template <typename T>
explicit value(const T &val) {
custom.value = &val;
custom.format = &format_custom_arg<T>;
}
const named_arg_base<char_type> &as_named_arg() {
return *static_cast<const named_arg_base<char_type>*>(pointer);
}
private:
// Formats an argument of a custom type, such as a user-defined class.
template <typename T>
static void format_custom_arg(const void *arg, Context &ctx) {
// Get the formatter type through the context to allow different contexts
// have different extension points, e.g. `formatter<T>` for `format` and
// `printf_formatter<T>` for `printf`.
typename Context::template formatter_type<T>::type f;
auto &&parse_ctx = ctx.parse_context();
parse_ctx.advance_to(f.parse(parse_ctx));
ctx.advance_to(f.format(*static_cast<const T*>(arg), ctx));
}
};
// Value initializer used to delay conversion to value and reduce memory churn.
template <typename Context, typename T, type TYPE>
struct init {
T val;
static const type type_tag = TYPE;
FMT_CONSTEXPR init(const T &v) : val(v) {}
FMT_CONSTEXPR operator value<Context>() const { return value<Context>(val); }
};
template <typename Context, typename T>
FMT_CONSTEXPR basic_format_arg<Context> make_arg(const T &value);
#define FMT_MAKE_VALUE(TAG, ArgType, ValueType) \
template <typename C> \
FMT_CONSTEXPR init<C, ValueType, TAG> make_value(ArgType val) { \
return static_cast<ValueType>(val); \
}
#define FMT_MAKE_VALUE_SAME(TAG, Type) \
template <typename C> \
FMT_CONSTEXPR init<C, Type, TAG> make_value(Type val) { return val; }
FMT_MAKE_VALUE(bool_type, bool, int)
FMT_MAKE_VALUE(int_type, short, int)
FMT_MAKE_VALUE(uint_type, unsigned short, unsigned)
FMT_MAKE_VALUE_SAME(int_type, int)
FMT_MAKE_VALUE_SAME(uint_type, unsigned)
// To minimize the number of types we need to deal with, long is translated
// either to int or to long long depending on its size.
typedef std::conditional<sizeof(long) == sizeof(int), int, long long>::type
long_type;
FMT_MAKE_VALUE(
(sizeof(long) == sizeof(int) ? int_type : long_long_type), long, long_type)
typedef std::conditional<sizeof(unsigned long) == sizeof(unsigned),
unsigned, unsigned long long>::type ulong_type;
FMT_MAKE_VALUE(
(sizeof(unsigned long) == sizeof(unsigned) ? uint_type : ulong_long_type),
unsigned long, ulong_type)
FMT_MAKE_VALUE_SAME(long_long_type, long long)
FMT_MAKE_VALUE_SAME(ulong_long_type, unsigned long long)
FMT_MAKE_VALUE(int_type, signed char, int)
FMT_MAKE_VALUE(uint_type, unsigned char, unsigned)
// This doesn't use FMT_MAKE_VALUE because of ambiguity in gcc 4.4.
template <typename C, typename Char>
FMT_CONSTEXPR typename std::enable_if<
std::is_same<typename C::char_type, Char>::value,
init<C, int, char_type>>::type make_value(Char val) { return val; }
template <typename C>
FMT_CONSTEXPR typename std::enable_if<
!std::is_same<typename C::char_type, char>::value,
init<C, int, char_type>>::type make_value(char val) { return val; }
FMT_MAKE_VALUE(double_type, float, double)
FMT_MAKE_VALUE_SAME(double_type, double)
FMT_MAKE_VALUE_SAME(long_double_type, long double)
// Formatting of wide strings into a narrow buffer and multibyte strings
// into a wide buffer is disallowed (https://github.com/fmtlib/fmt/pull/606).
FMT_MAKE_VALUE(cstring_type, typename C::char_type*,
const typename C::char_type*)
FMT_MAKE_VALUE(cstring_type, const typename C::char_type*,
const typename C::char_type*)
FMT_MAKE_VALUE(cstring_type, signed char*, const signed char*)
FMT_MAKE_VALUE_SAME(cstring_type, const signed char*)
FMT_MAKE_VALUE(cstring_type, unsigned char*, const unsigned char*)
FMT_MAKE_VALUE_SAME(cstring_type, const unsigned char*)
FMT_MAKE_VALUE_SAME(string_type, basic_string_view<typename C::char_type>)
FMT_MAKE_VALUE(string_type,
typename basic_string_view<typename C::char_type>::type,
basic_string_view<typename C::char_type>)
FMT_MAKE_VALUE(string_type, const std::basic_string<typename C::char_type>&,
basic_string_view<typename C::char_type>)
FMT_MAKE_VALUE(pointer_type, void*, const void*)
FMT_MAKE_VALUE_SAME(pointer_type, const void*)
#if FMT_USE_NULLPTR
FMT_MAKE_VALUE(pointer_type, std::nullptr_t, const void*)
#endif
// Formatting of arbitrary pointers is disallowed. If you want to output a
// pointer cast it to "void *" or "const void *". In particular, this forbids
// formatting of "[const] volatile char *" which is printed as bool by
// iostreams.
template <typename C, typename T>
typename std::enable_if<!std::is_same<T, typename C::char_type>::value>::type
make_value(const T *) {
static_assert(!sizeof(T), "formatting of non-void pointers is disallowed");
}
template <typename C, typename T>
inline typename std::enable_if<
std::is_enum<T>::value && convert_to_int<T, typename C::char_type>::value,
init<C, int, int_type>>::type
make_value(const T &val) { return static_cast<int>(val); }
template <typename C, typename T, typename Char = typename C::char_type>
inline typename std::enable_if<
is_constructible<basic_string_view<Char>, T>::value &&
!internal::is_string<T>::value,
init<C, basic_string_view<Char>, string_type>>::type
make_value(const T &val) { return basic_string_view<Char>(val); }
template <typename C, typename T, typename Char = typename C::char_type>
inline typename std::enable_if<
!convert_to_int<T, Char>::value && !std::is_same<T, Char>::value &&
!std::is_convertible<T, basic_string_view<Char>>::value &&
!is_constructible<basic_string_view<Char>, T>::value &&
!internal::is_string<T>::value,
// Implicit conversion to std::string is not handled here because it's
// unsafe: https://github.com/fmtlib/fmt/issues/729
init<C, const T &, custom_type>>::type
make_value(const T &val) { return val; }
template <typename C, typename T>
init<C, const void*, named_arg_type>
make_value(const named_arg<T, typename C::char_type> &val) {
basic_format_arg<C> arg = make_arg<C>(val.value);
std::memcpy(val.data, &arg, sizeof(arg));
return static_cast<const void*>(&val);
}
template <typename C, typename S>
FMT_CONSTEXPR11 typename std::enable_if<
internal::is_string<S>::value,
init<C, basic_string_view<typename C::char_type>, string_type>>::type
make_value(const S &val) {
// Handle adapted strings.
static_assert(std::is_same<
typename C::char_type, typename internal::char_t<S>::type>::value,
"mismatch between char-types of context and argument");
return to_string_view(val);
}
// Maximum number of arguments with packed types.
enum { max_packed_args = 15 };
template <typename Context>
class arg_map;
} // namespace internal
// A formatting argument. It is a trivially copyable/constructible type to
// allow storage in basic_memory_buffer.
template <typename Context>
class basic_format_arg {
private:
internal::value<Context> value_;
internal::type type_;
template <typename ContextType, typename T>
friend FMT_CONSTEXPR basic_format_arg<ContextType>
internal::make_arg(const T &value);
template <typename Visitor, typename Ctx>
friend FMT_CONSTEXPR typename internal::result_of<Visitor(int)>::type
visit_format_arg(Visitor &&vis, const basic_format_arg<Ctx> &arg);
friend class basic_format_args<Context>;
friend class internal::arg_map<Context>;
typedef typename Context::char_type char_type;
public:
class handle {
public:
explicit handle(internal::custom_value<Context> custom): custom_(custom) {}
void format(Context &ctx) const { custom_.format(custom_.value, ctx); }
private:
internal::custom_value<Context> custom_;
};
FMT_CONSTEXPR basic_format_arg() : type_(internal::none_type) {}
FMT_EXPLICIT operator bool() const FMT_NOEXCEPT {
return type_ != internal::none_type;
}
internal::type type() const { return type_; }
bool is_integral() const { return internal::is_integral(type_); }
bool is_arithmetic() const { return internal::is_arithmetic(type_); }
};
struct monostate {};
/**
\rst
Visits an argument dispatching to the appropriate visit method based on
the argument type. For example, if the argument type is ``double`` then
``vis(value)`` will be called with the value of type ``double``.
\endrst
*/
template <typename Visitor, typename Context>
FMT_CONSTEXPR typename internal::result_of<Visitor(int)>::type
visit_format_arg(Visitor &&vis, const basic_format_arg<Context> &arg) {
typedef typename Context::char_type char_type;
switch (arg.type_) {
case internal::none_type:
break;
case internal::named_arg_type:
FMT_ASSERT(false, "invalid argument type");
break;
case internal::int_type:
return vis(arg.value_.int_value);
case internal::uint_type:
return vis(arg.value_.uint_value);
case internal::long_long_type:
return vis(arg.value_.long_long_value);
case internal::ulong_long_type:
return vis(arg.value_.ulong_long_value);
case internal::bool_type:
return vis(arg.value_.int_value != 0);
case internal::char_type:
return vis(static_cast<char_type>(arg.value_.int_value));
case internal::double_type:
return vis(arg.value_.double_value);
case internal::long_double_type:
return vis(arg.value_.long_double_value);
case internal::cstring_type:
return vis(arg.value_.string.value);
case internal::string_type:
return vis(basic_string_view<char_type>(
arg.value_.string.value, arg.value_.string.size));
case internal::pointer_type:
return vis(arg.value_.pointer);
case internal::custom_type:
return vis(typename basic_format_arg<Context>::handle(arg.value_.custom));
}
return vis(monostate());
}
template <typename Visitor, typename Context>
FMT_CONSTEXPR typename internal::result_of<Visitor(int)>::type
visit(Visitor &&vis, const basic_format_arg<Context> &arg) {
return visit_format_arg(std::forward<Visitor>(vis), arg);
}
// Parsing context consisting of a format string range being parsed and an
// argument counter for automatic indexing.
template <typename Char, typename ErrorHandler = internal::error_handler>
class basic_parse_context : private ErrorHandler {
private:
basic_string_view<Char> format_str_;
int next_arg_id_;
public:
typedef Char char_type;
typedef typename basic_string_view<Char>::iterator iterator;
explicit FMT_CONSTEXPR basic_parse_context(
basic_string_view<Char> format_str, ErrorHandler eh = ErrorHandler())
: ErrorHandler(eh), format_str_(format_str), next_arg_id_(0) {}
// Returns an iterator to the beginning of the format string range being
// parsed.
FMT_CONSTEXPR iterator begin() const FMT_NOEXCEPT {
return format_str_.begin();
}
// Returns an iterator past the end of the format string range being parsed.
FMT_CONSTEXPR iterator end() const FMT_NOEXCEPT { return format_str_.end(); }
// Advances the begin iterator to ``it``.
FMT_CONSTEXPR void advance_to(iterator it) {
format_str_.remove_prefix(internal::to_unsigned(it - begin()));
}
// Returns the next argument index.
FMT_CONSTEXPR unsigned next_arg_id();
FMT_CONSTEXPR bool check_arg_id(unsigned) {
if (next_arg_id_ > 0) {
on_error("cannot switch from automatic to manual argument indexing");
return false;
}
next_arg_id_ = -1;
return true;
}
void check_arg_id(basic_string_view<Char>) {}
FMT_CONSTEXPR void on_error(const char *message) {
ErrorHandler::on_error(message);
}
FMT_CONSTEXPR ErrorHandler error_handler() const { return *this; }
};
typedef basic_parse_context<char> parse_context;
typedef basic_parse_context<wchar_t> wparse_context;
namespace internal {
// A map from argument names to their values for named arguments.
template <typename Context>
class arg_map {
private:
arg_map(const arg_map &) = delete;
void operator=(const arg_map &) = delete;
typedef typename Context::char_type char_type;
struct entry {
basic_string_view<char_type> name;
basic_format_arg<Context> arg;
};
entry *map_;
unsigned size_;
void push_back(value<Context> val) {
const internal::named_arg_base<char_type> &named = val.as_named_arg();
map_[size_] = entry{named.name, named.template deserialize<Context>()};
++size_;
}
public:
arg_map() : map_(FMT_NULL), size_(0) {}
void init(const basic_format_args<Context> &args);
~arg_map() { delete [] map_; }
basic_format_arg<Context> find(basic_string_view<char_type> name) const {
// The list is unsorted, so just return the first matching name.
for (entry *it = map_, *end = map_ + size_; it != end; ++it) {
if (it->name == name)
return it->arg;
}
return {};
}
};
// A type-erased reference to an std::locale to avoid heavy <locale> include.
class locale_ref {
private:
const void *locale_; // A type-erased pointer to std::locale.
friend class locale;
public:
locale_ref() : locale_(FMT_NULL) {}
template <typename Locale>
explicit locale_ref(const Locale &loc);
template <typename Locale>
Locale get() const;
};
template <typename OutputIt, typename Context, typename Char>
class context_base {
public:
typedef OutputIt iterator;
private:
basic_parse_context<Char> parse_context_;
iterator out_;
basic_format_args<Context> args_;
locale_ref loc_;
protected:
typedef Char char_type;
typedef basic_format_arg<Context> format_arg;
context_base(OutputIt out, basic_string_view<char_type> format_str,
basic_format_args<Context> ctx_args,
locale_ref loc = locale_ref())
: parse_context_(format_str), out_(out), args_(ctx_args), loc_(loc) {}
// Returns the argument with specified index.
format_arg do_get_arg(unsigned arg_id) {
format_arg arg = args_.get(arg_id);
if (!arg)
parse_context_.on_error("argument index out of range");
return arg;
}
// Checks if manual indexing is used and returns the argument with
// specified index.
format_arg get_arg(unsigned arg_id) {
return this->parse_context().check_arg_id(arg_id) ?
this->do_get_arg(arg_id) : format_arg();
}
public:
basic_parse_context<char_type> &parse_context() { return parse_context_; }
basic_format_args<Context> args() const { return args_; }
internal::error_handler error_handler() {
return parse_context_.error_handler();
}
void on_error(const char *message) { parse_context_.on_error(message); }
// Returns an iterator to the beginning of the output range.
iterator out() { return out_; }
iterator begin() { return out_; } // deprecated
// Advances the begin iterator to ``it``.
void advance_to(iterator it) { out_ = it; }
locale_ref locale() { return loc_; }
};
template <typename Context, typename T>
struct get_type {
typedef decltype(make_value<Context>(
declval<typename std::decay<T>::type&>())) value_type;
static const type value = value_type::type_tag;
};
template <typename Context>
FMT_CONSTEXPR11 unsigned long long get_types() { return 0; }
template <typename Context, typename Arg, typename... Args>
FMT_CONSTEXPR11 unsigned long long get_types() {
return get_type<Context, Arg>::value | (get_types<Context, Args...>() << 4);
}
template <typename Context, typename T>
FMT_CONSTEXPR basic_format_arg<Context> make_arg(const T &value) {
basic_format_arg<Context> arg;
arg.type_ = get_type<Context, T>::value;
arg.value_ = make_value<Context>(value);
return arg;
}
template <bool IS_PACKED, typename Context, typename T>
inline typename std::enable_if<IS_PACKED, value<Context>>::type
make_arg(const T &value) {
return make_value<Context>(value);
}
template <bool IS_PACKED, typename Context, typename T>
inline typename std::enable_if<!IS_PACKED, basic_format_arg<Context>>::type
make_arg(const T &value) {
return make_arg<Context>(value);
}
} // namespace internal
// Formatting context.
template <typename OutputIt, typename Char>
class basic_format_context :
public internal::context_base<
OutputIt, basic_format_context<OutputIt, Char>, Char> {
public:
/** The character type for the output. */
typedef Char char_type;
// using formatter_type = formatter<T, char_type>;
template <typename T>
struct formatter_type { typedef formatter<T, char_type> type; };
private:
internal::arg_map<basic_format_context> map_;
basic_format_context(const basic_format_context &) = delete;
void operator=(const basic_format_context &) = delete;
typedef internal::context_base<OutputIt, basic_format_context, Char> base;
typedef typename base::format_arg format_arg;
using base::get_arg;
public:
using typename base::iterator;
/**
Constructs a ``basic_format_context`` object. References to the arguments are
stored in the object so make sure they have appropriate lifetimes.
*/
basic_format_context(OutputIt out, basic_string_view<char_type> format_str,
basic_format_args<basic_format_context> ctx_args,
internal::locale_ref loc = internal::locale_ref())
: base(out, format_str, ctx_args, loc) {}
format_arg next_arg() {
return this->do_get_arg(this->parse_context().next_arg_id());
}
format_arg get_arg(unsigned arg_id) { return this->do_get_arg(arg_id); }
// Checks if manual indexing is used and returns the argument with the
// specified name.
format_arg get_arg(basic_string_view<char_type> name);
};
template <typename Char>
struct buffer_context {
typedef basic_format_context<
std::back_insert_iterator<internal::basic_buffer<Char>>, Char> type;
};
typedef buffer_context<char>::type format_context;
typedef buffer_context<wchar_t>::type wformat_context;
/**
\rst
An array of references to arguments. It can be implicitly converted into
`~fmt::basic_format_args` for passing into type-erased formatting functions
such as `~fmt::vformat`.
\endrst
*/
template <typename Context, typename ...Args>
class format_arg_store {
private:
static const size_t NUM_ARGS = sizeof...(Args);
// Packed is a macro on MinGW so use IS_PACKED instead.
static const bool IS_PACKED = NUM_ARGS < internal::max_packed_args;
typedef typename std::conditional<IS_PACKED,
internal::value<Context>, basic_format_arg<Context>>::type value_type;
// If the arguments are not packed, add one more element to mark the end.
static const size_t DATA_SIZE =
NUM_ARGS + (IS_PACKED && NUM_ARGS != 0 ? 0 : 1);
value_type data_[DATA_SIZE];
friend class basic_format_args<Context>;
static FMT_CONSTEXPR11 long long get_types() {
return IS_PACKED ?
static_cast<long long>(internal::get_types<Context, Args...>()) :
-static_cast<long long>(NUM_ARGS);
}
public:
#if FMT_USE_CONSTEXPR11
static FMT_CONSTEXPR11 long long TYPES = get_types();
#else
static const long long TYPES;
#endif
#if (FMT_GCC_VERSION && FMT_GCC_VERSION <= 405) || \
(FMT_MSC_VER && FMT_MSC_VER <= 1800)
// Workaround array initialization issues in gcc <= 4.5 and MSVC <= 2013.
format_arg_store(const Args &... args) {
value_type init[DATA_SIZE] =
{internal::make_arg<IS_PACKED, Context>(args)...};
std::memcpy(data_, init, sizeof(init));
}
#else
format_arg_store(const Args &... args)
: data_{internal::make_arg<IS_PACKED, Context>(args)...} {}
#endif
};
#if !FMT_USE_CONSTEXPR11
template <typename Context, typename ...Args>
const long long format_arg_store<Context, Args...>::TYPES = get_types();
#endif
/**
\rst
Constructs an `~fmt::format_arg_store` object that contains references to
arguments and can be implicitly converted to `~fmt::format_args`. `Context`
can be omitted in which case it defaults to `~fmt::context`.
\endrst
*/
template <typename Context, typename ...Args>
inline format_arg_store<Context, Args...>
make_format_args(const Args &... args) { return {args...}; }
template <typename ...Args>
inline format_arg_store<format_context, Args...>
make_format_args(const Args &... args) { return {args...}; }
/** Formatting arguments. */
template <typename Context>
class basic_format_args {
public:
typedef unsigned size_type;
typedef basic_format_arg<Context> format_arg;
private:
// To reduce compiled code size per formatting function call, types of first
// max_packed_args arguments are passed in the types_ field.
unsigned long long types_;
union {
// If the number of arguments is less than max_packed_args, the argument
// values are stored in values_, otherwise they are stored in args_.
// This is done to reduce compiled code size as storing larger objects
// may require more code (at least on x86-64) even if the same amount of
// data is actually copied to stack. It saves ~10% on the bloat test.
const internal::value<Context> *values_;
const format_arg *args_;
};
typename internal::type type(unsigned index) const {
unsigned shift = index * 4;
unsigned long long mask = 0xf;
return static_cast<typename internal::type>(
(types_ & (mask << shift)) >> shift);
}
friend class internal::arg_map<Context>;
void set_data(const internal::value<Context> *values) { values_ = values; }
void set_data(const format_arg *args) { args_ = args; }
format_arg do_get(size_type index) const {
format_arg arg;
long long signed_types = static_cast<long long>(types_);
if (signed_types < 0) {
unsigned long long num_args =
static_cast<unsigned long long>(-signed_types);
if (index < num_args)
arg = args_[index];
return arg;
}
if (index > internal::max_packed_args)
return arg;
arg.type_ = type(index);
if (arg.type_ == internal::none_type)
return arg;
internal::value<Context> &val = arg.value_;
val = values_[index];
return arg;
}
public:
basic_format_args() : types_(0) {}
/**
\rst
Constructs a `basic_format_args` object from `~fmt::format_arg_store`.
\endrst
*/
template <typename... Args>
basic_format_args(const format_arg_store<Context, Args...> &store)
: types_(static_cast<unsigned long long>(store.TYPES)) {
set_data(store.data_);
}
/**
\rst
Constructs a `basic_format_args` object from a dynamic set of arguments.
\endrst
*/
basic_format_args(const format_arg *args, size_type count)
: types_(-static_cast<int64_t>(count)) {
set_data(args);
}
/** Returns the argument at specified index. */
format_arg get(size_type index) const {
format_arg arg = do_get(index);
if (arg.type_ == internal::named_arg_type)
arg = arg.value_.as_named_arg().template deserialize<Context>();
return arg;
}
unsigned max_size() const {
long long signed_types = static_cast<long long>(types_);
return static_cast<unsigned>(
signed_types < 0 ?
-signed_types : static_cast<long long>(internal::max_packed_args));
}
};
/** An alias to ``basic_format_args<context>``. */
// It is a separate type rather than a typedef to make symbols readable.
struct format_args : basic_format_args<format_context> {
template <typename ...Args>
format_args(Args &&... arg)
: basic_format_args<format_context>(std::forward<Args>(arg)...) {}
};
struct wformat_args : basic_format_args<wformat_context> {
template <typename ...Args>
wformat_args(Args &&... arg)
: basic_format_args<wformat_context>(std::forward<Args>(arg)...) {}
};
#ifndef FMT_USE_ALIAS_TEMPLATES
# define FMT_USE_ALIAS_TEMPLATES FMT_HAS_FEATURE(cxx_alias_templates)
#endif
#if FMT_USE_ALIAS_TEMPLATES
/** String's character type. */
template <typename S>
using char_t = typename std::enable_if<internal::is_string<S>::value,
typename internal::char_t<S>::type>::type;
#define FMT_CHAR(S) fmt::char_t<S>
template <typename S, typename T>
using enable_if_string_t =
typename std::enable_if<internal::is_string<S>::value, T>::type;
#define FMT_ENABLE_IF_STRING(S, T) enable_if_string_t<S, T>
#else
template <typename S>
struct char_t : std::enable_if<
internal::is_string<S>::value, typename internal::char_t<S>::type> {};
#define FMT_CHAR(S) typename char_t<S>::type
#define FMT_ENABLE_IF_STRING(S, T) \
typename std::enable_if<internal::is_string<S>::value, T>::type
#endif
namespace internal {
template <typename Char>
struct named_arg_base {
basic_string_view<Char> name;
// Serialized value<context>.
mutable char data[
sizeof(basic_format_arg<typename buffer_context<Char>::type>)];
named_arg_base(basic_string_view<Char> nm) : name(nm) {}
template <typename Context>
basic_format_arg<Context> deserialize() const {
basic_format_arg<Context> arg;
std::memcpy(&arg, data, sizeof(basic_format_arg<Context>));
return arg;
}
};
template <typename T, typename Char>
struct named_arg : named_arg_base<Char> {
const T &value;
named_arg(basic_string_view<Char> name, const T &val)
: named_arg_base<Char>(name), value(val) {}
};
template <typename... Args, typename S>
inline typename std::enable_if<!is_compile_string<S>::value>::type
check_format_string(const S &) {}
template <typename... Args, typename S>
typename std::enable_if<is_compile_string<S>::value>::type
check_format_string(S);
template <typename S, typename... Args>
struct checked_args : format_arg_store<
typename buffer_context<FMT_CHAR(S)>::type, Args...> {
typedef typename buffer_context<FMT_CHAR(S)>::type context;
checked_args(const S &format_str, const Args &... args):
format_arg_store<context, Args...>(args...) {
internal::check_format_string<Args...>(format_str);
}
basic_format_args<context> operator*() const { return *this; }
};
template <typename Char>
std::basic_string<Char> vformat(
basic_string_view<Char> format_str,
basic_format_args<typename buffer_context<Char>::type> args);
template <typename Char>
typename buffer_context<Char>::type::iterator vformat_to(
internal::basic_buffer<Char> &buf, basic_string_view<Char> format_str,
basic_format_args<typename buffer_context<Char>::type> args);
}
/**
\rst
Returns a named argument to be used in a formatting function.
**Example**::
fmt::print("Elapsed time: {s:.2f} seconds", fmt::arg("s", 1.23));
\endrst
*/
template <typename T>
inline internal::named_arg<T, char> arg(string_view name, const T &arg) {
return {name, arg};
}
template <typename T>
inline internal::named_arg<T, wchar_t> arg(wstring_view name, const T &arg) {
return {name, arg};
}
// Disable nested named arguments, e.g. ``arg("a", arg("b", 42))``.
template <typename S, typename T, typename Char>
void arg(S, internal::named_arg<T, Char>) = delete;
template <typename Container>
struct is_contiguous: std::false_type {};
template <typename Char>
struct is_contiguous<std::basic_string<Char> >: std::true_type {};
template <typename Char>
struct is_contiguous<internal::basic_buffer<Char> >: std::true_type {};
/** Formats a string and writes the output to ``out``. */
template <typename Container, typename S>
typename std::enable_if<
is_contiguous<Container>::value, std::back_insert_iterator<Container>>::type
vformat_to(
std::back_insert_iterator<Container> out,
const S &format_str,
basic_format_args<typename buffer_context<FMT_CHAR(S)>::type> args) {
internal::container_buffer<Container> buf(internal::get_container(out));
internal::vformat_to(buf, to_string_view(format_str), args);
return out;
}
template <typename Container, typename S, typename... Args>
inline typename std::enable_if<
is_contiguous<Container>::value && internal::is_string<S>::value,
std::back_insert_iterator<Container>>::type
format_to(std::back_insert_iterator<Container> out, const S &format_str,
const Args &... args) {
internal::checked_args<S, Args...> ca(format_str, args...);
return vformat_to(out, to_string_view(format_str), *ca);
}
template <typename S, typename Char = FMT_CHAR(S)>
inline std::basic_string<Char> vformat(
const S &format_str,
basic_format_args<typename buffer_context<Char>::type> args) {
return internal::vformat(to_string_view(format_str), args);
}
/**
\rst
Formats arguments and returns the result as a string.
**Example**::
#include <fmt/core.h>
std::string message = fmt::format("The answer is {}", 42);
\endrst
*/
template <typename S, typename... Args>
inline std::basic_string<FMT_CHAR(S)> format(
const S &format_str, const Args &... args) {
return internal::vformat(
to_string_view(format_str),
*internal::checked_args<S, Args...>(format_str, args...));
}
FMT_API void vprint(std::FILE *f, string_view format_str, format_args args);
FMT_API void vprint(std::FILE *f, wstring_view format_str, wformat_args args);
/**
\rst
Prints formatted data to the file *f*. For wide format strings,
*f* should be in wide-oriented mode set via ``fwide(f, 1)`` or
``_setmode(_fileno(f), _O_U8TEXT)`` on Windows.
**Example**::
fmt::print(stderr, "Don't {}!", "panic");
\endrst
*/
template <typename S, typename... Args>
inline FMT_ENABLE_IF_STRING(S, void)
print(std::FILE *f, const S &format_str, const Args &... args) {
vprint(f, to_string_view(format_str),
internal::checked_args<S, Args...>(format_str, args...));
}
FMT_API void vprint(string_view format_str, format_args args);
FMT_API void vprint(wstring_view format_str, wformat_args args);
/**
\rst
Prints formatted data to ``stdout``.
**Example**::
fmt::print("Elapsed time: {0:.2f} seconds", 1.23);
\endrst
*/
template <typename S, typename... Args>
inline FMT_ENABLE_IF_STRING(S, void)
print(const S &format_str, const Args &... args) {
vprint(to_string_view(format_str),
internal::checked_args<S, Args...>(format_str, args...));
}
FMT_END_NAMESPACE
#endif // FMT_CORE_H_
================================================
FILE: src/DRAMsim3/ext/fmt/include/fmt/format-inl.h
================================================
// Formatting library for C++
//
// Copyright (c) 2012 - 2016, Victor Zverovich
// All rights reserved.
//
// For the license information refer to format.h.
#ifndef FMT_FORMAT_INL_H_
#define FMT_FORMAT_INL_H_
#include "format.h"
#include <string.h>
#include <cctype>
#include <cerrno>
#include <climits>
#include <cmath>
#include <cstdarg>
#include <cstddef> // for std::ptrdiff_t
#include <cstring> // for std::memmove
#if !defined(FMT_STATIC_THOUSANDS_SEPARATOR)
# include <locale>
#endif
#if FMT_USE_WINDOWS_H
# if !defined(FMT_HEADER_ONLY) && !defined(WIN32_LEAN_AND_MEAN)
# define WIN32_LEAN_AND_MEAN
# endif
# if defined(NOMINMAX) || defined(FMT_WIN_MINMAX)
# include <windows.h>
# else
# define NOMINMAX
# include <windows.h>
# undef NOMINMAX
# endif
#endif
#if FMT_EXCEPTIONS
# define FMT_TRY try
# define FMT_CATCH(x) catch (x)
#else
# define FMT_TRY if (true)
# define FMT_CATCH(x) if (false)
#endif
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable: 4127) // conditional expression is constant
# pragma warning(disable: 4702) // unreachable code
// Disable deprecation warning for strerror. The latter is not called but
// MSVC fails to detect it.
# pragma warning(disable: 4996)
#endif
// Dummy implementations of strerror_r and strerror_s called if corresponding
// system functions are not available.
inline fmt::internal::null<> strerror_r(int, char *, ...) {
return fmt::internal::null<>();
}
inline fmt::internal::null<> strerror_s(char *, std::size_t, ...) {
return fmt::internal::null<>();
}
FMT_BEGIN_NAMESPACE
namespace {
#ifndef _MSC_VER
# define FMT_SNPRINTF snprintf
#else // _MSC_VER
inline int fmt_snprintf(char *buffer, size_t size, const char *format, ...) {
va_list args;
va_start(args, format);
int result = vsnprintf_s(buffer, size, _TRUNCATE, format, args);
va_end(args);
return result;
}
# define FMT_SNPRINTF fmt_snprintf
#endif // _MSC_VER
#if defined(_WIN32) && defined(__MINGW32__) && !defined(__NO_ISOCEXT)
# define FMT_SWPRINTF snwprintf
#else
# define FMT_SWPRINTF swprintf
#endif // defined(_WIN32) && defined(__MINGW32__) && !defined(__NO_ISOCEXT)
typedef void (*FormatFunc)(internal::buffer &, int, string_view);
// Portable thread-safe version of strerror.
// Sets buffer to point to a string describing the error code.
// This can be either a pointer to a string stored in buffer,
// or a pointer to some static immutable string.
// Returns one of the following values:
// 0 - success
// ERANGE - buffer is not large enough to store the error message
// other - failure
// Buffer should be at least of size 1.
int safe_strerror(
int error_code, char *&buffer, std::size_t buffer_size) FMT_NOEXCEPT {
FMT_ASSERT(buffer != FMT_NULL && buffer_size != 0, "invalid buffer");
class dispatcher {
private:
int error_code_;
char *&buffer_;
std::size_t buffer_size_;
// A noop assignment operator to avoid bogus warnings.
void operator=(const dispatcher &) {}
// Handle the result of XSI-compliant version of strerror_r.
int handle(int result) {
// glibc versions before 2.13 return result in errno.
return result == -1 ? errno : result;
}
// Handle the result of GNU-specific version of strerror_r.
int handle(char *message) {
// If the buffer is full then the message is probably truncated.
if (message == buffer_ && strlen(buffer_) == buffer_size_ - 1)
return ERANGE;
buffer_ = message;
return 0;
}
// Handle the case when strerror_r is not available.
int handle(internal::null<>) {
return fallback(strerror_s(buffer_, buffer_size_, error_code_));
}
// Fallback to strerror_s when strerror_r is not available.
int fallback(int result) {
// If the buffer is full then the message is probably truncated.
return result == 0 && strlen(buffer_) == buffer_size_ - 1 ?
ERANGE : result;
}
// Fallback to strerror if strerror_r and strerror_s are not available.
int fallback(internal::null<>) {
errno = 0;
buffer_ = strerror(error_code_);
return errno;
}
public:
dispatcher(int err_code, char *&buf, std::size_t buf_size)
: error_code_(err_code), buffer_(buf), buffer_size_(buf_size) {}
int run() {
return handle(strerror_r(error_code_, buffer_, buffer_size_));
}
};
return dispatcher(error_code, buffer, buffer_size).run();
}
void format_error_code(internal::buffer &out, int error_code,
string_view message) FMT_NOEXCEPT {
// Report error code making sure that the output fits into
// inline_buffer_size to avoid dynamic memory allocation and potential
// bad_alloc.
out.resize(0);
static const char SEP[] = ": ";
static const char ERROR_STR[] = "error ";
// Subtract 2 to account for terminating null characters in SEP and ERROR_STR.
std::size_t error_code_size = sizeof(SEP) + sizeof(ERROR_STR) - 2;
typedef internal::int_traits<int>::main_type main_type;
main_type abs_value = static_cast<main_type>(error_code);
if (internal::is_negative(error_code)) {
abs_value = 0 - abs_value;
++error_code_size;
}
error_code_size += internal::count_digits(abs_value);
writer w(out);
if (message.siz
gitextract_e6jvuvxv/
├── .gitignore
├── .gitmodules
├── Changelog.md
├── LICENSE.md
├── README.md
├── configs/
│ ├── riscv64_inorder_soc.cfg
│ └── riscv64_outoforder_soc.cfg
└── src/
├── DRAMsim3/
│ ├── .clang-format
│ ├── .gitignore
│ ├── .gitmodules
│ ├── .travis.yml
│ ├── CMakeLists.txt
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── configs/
│ │ ├── DDR3_1Gb_x8_1333.ini
│ │ ├── DDR3_4Gb_x16_1600.ini
│ │ ├── DDR3_4Gb_x16_1866.ini
│ │ ├── DDR3_4Gb_x4_1600.ini
│ │ ├── DDR3_4Gb_x4_1866.ini
│ │ ├── DDR3_4Gb_x8_1600.ini
│ │ ├── DDR3_4Gb_x8_1866.ini
│ │ ├── DDR3_8Gb_x16_1600.ini
│ │ ├── DDR3_8Gb_x16_1866.ini
│ │ ├── DDR3_8Gb_x4_1600.ini
│ │ ├── DDR3_8Gb_x4_1866.ini
│ │ ├── DDR3_8Gb_x8_1600.ini
│ │ ├── DDR3_8Gb_x8_1866.ini
│ │ ├── DDR4_4Gb_x16_1866.ini
│ │ ├── DDR4_4Gb_x16_2133.ini
│ │ ├── DDR4_4Gb_x16_2133_2.ini
│ │ ├── DDR4_4Gb_x16_2400.ini
│ │ ├── DDR4_4Gb_x16_2400_2.ini
│ │ ├── DDR4_4Gb_x16_2666.ini
│ │ ├── DDR4_4Gb_x16_2666_2.ini
│ │ ├── DDR4_4Gb_x4_1866.ini
│ │ ├── DDR4_4Gb_x4_2133.ini
│ │ ├── DDR4_4Gb_x4_2133_2.ini
│ │ ├── DDR4_4Gb_x4_2400.ini
│ │ ├── DDR4_4Gb_x4_2400_2.ini
│ │ ├── DDR4_4Gb_x4_2666.ini
│ │ ├── DDR4_4Gb_x4_2666_2.ini
│ │ ├── DDR4_4Gb_x8_1866.ini
│ │ ├── DDR4_4Gb_x8_2133.ini
│ │ ├── DDR4_4Gb_x8_2133_2.ini
│ │ ├── DDR4_4Gb_x8_2400.ini
│ │ ├── DDR4_4Gb_x8_2400_2.ini
│ │ ├── DDR4_4Gb_x8_2666.ini
│ │ ├── DDR4_4Gb_x8_2666_2.ini
│ │ ├── DDR4_8Gb_x16_1866.ini
│ │ ├── DDR4_8Gb_x16_2133.ini
│ │ ├── DDR4_8Gb_x16_2133_2.ini
│ │ ├── DDR4_8Gb_x16_2400.ini
│ │ ├── DDR4_8Gb_x16_2400_2.ini
│ │ ├── DDR4_8Gb_x16_2666.ini
│ │ ├── DDR4_8Gb_x16_2666_2.ini
│ │ ├── DDR4_8Gb_x16_2933.ini
│ │ ├── DDR4_8Gb_x16_2933_2.ini
│ │ ├── DDR4_8Gb_x16_3200.ini
│ │ ├── DDR4_8Gb_x4_1866.ini
│ │ ├── DDR4_8Gb_x4_2133.ini
│ │ ├── DDR4_8Gb_x4_2133_2.ini
│ │ ├── DDR4_8Gb_x4_2400.ini
│ │ ├── DDR4_8Gb_x4_2400_2.ini
│ │ ├── DDR4_8Gb_x4_2666.ini
│ │ ├── DDR4_8Gb_x4_2666_2.ini
│ │ ├── DDR4_8Gb_x4_2933.ini
│ │ ├── DDR4_8Gb_x4_2933_2.ini
│ │ ├── DDR4_8Gb_x4_3200.ini
│ │ ├── DDR4_8Gb_x8_1866.ini
│ │ ├── DDR4_8Gb_x8_2133.ini
│ │ ├── DDR4_8Gb_x8_2133_2.ini
│ │ ├── DDR4_8Gb_x8_2400.ini
│ │ ├── DDR4_8Gb_x8_2400_2.ini
│ │ ├── DDR4_8Gb_x8_2666.ini
│ │ ├── DDR4_8Gb_x8_2666_2.ini
│ │ ├── DDR4_8Gb_x8_2933.ini
│ │ ├── DDR4_8Gb_x8_2933_2.ini
│ │ ├── DDR4_8Gb_x8_3200.ini
│ │ ├── GDDR5X_8Gb_x32.ini
│ │ ├── GDDR5_1Gb_x32.ini
│ │ ├── GDDR5_8Gb_x32.ini
│ │ ├── GDDR6_8Gb_x16.ini
│ │ ├── HBM1_4Gb_x128.ini
│ │ ├── HBM2_4Gb_x128.ini
│ │ ├── HBM2_8Gb_x128.ini
│ │ ├── HBM_4Gb_x128.ini
│ │ ├── HMC2_8GB_4Lx16.ini
│ │ ├── HMC_2GB_4Lx16.ini
│ │ ├── HMC_2GB_4Lx16_dummy.ini
│ │ ├── HMC_4GB_4Lx16.ini
│ │ ├── LPDDR3_8Gb_x32_1333.ini
│ │ ├── LPDDR3_8Gb_x32_1600.ini
│ │ ├── LPDDR3_8Gb_x32_1866.ini
│ │ ├── LPDDR4_8Gb_x16_2400.ini
│ │ ├── ST-1.2x.ini
│ │ ├── ST-1.5x.ini
│ │ ├── ST-2.0x.ini
│ │ ├── ddr3_debug.ini
│ │ ├── ddr4_debug.ini
│ │ └── lpddr_2Gb_x16.ini
│ ├── ext/
│ │ ├── fmt/
│ │ │ ├── LICENSE.rst
│ │ │ └── include/
│ │ │ └── fmt/
│ │ │ ├── core.h
│ │ │ ├── format-inl.h
│ │ │ └── format.h
│ │ └── headers/
│ │ ├── INIHLICENSE.txt
│ │ ├── INIReader.h
│ │ ├── args.hxx
│ │ ├── catch.hpp
│ │ └── json.hpp
│ ├── scripts/
│ │ ├── batch_run.py
│ │ ├── final_PowerTemperature_map.py
│ │ ├── heatmap.py
│ │ ├── parse_config.py
│ │ ├── plot_stats.py
│ │ ├── trace_gen.py
│ │ └── validation.py
│ ├── src/
│ │ ├── bankstate.cc
│ │ ├── bankstate.h
│ │ ├── channel_state.cc
│ │ ├── channel_state.h
│ │ ├── command_queue.cc
│ │ ├── command_queue.h
│ │ ├── common.cc
│ │ ├── common.h
│ │ ├── configuration.cc
│ │ ├── configuration.h
│ │ ├── controller.cc
│ │ ├── controller.h
│ │ ├── cpu.cc
│ │ ├── cpu.h
│ │ ├── dram_system.cc
│ │ ├── dram_system.h
│ │ ├── dramsim3.h
│ │ ├── hmc.cc
│ │ ├── hmc.h
│ │ ├── main.cc
│ │ ├── memory_system.cc
│ │ ├── memory_system.h
│ │ ├── refresh.cc
│ │ ├── refresh.h
│ │ ├── simple_stats.cc
│ │ ├── simple_stats.h
│ │ ├── sp_ienv.c
│ │ ├── thermal.cc
│ │ ├── thermal.h
│ │ ├── thermal_config.h
│ │ ├── thermal_replay.cc
│ │ ├── thermal_replay.h
│ │ ├── thermal_solver.c
│ │ ├── timing.cc
│ │ └── timing.h
│ └── tests/
│ ├── example.trace
│ ├── test_config.cc
│ ├── test_dramsys.cc
│ └── test_hmcsys.cc
├── MIT-LICENSE.txt
├── Makefile
├── VERSION
├── aes.c
├── aes.h
├── block_net.c
├── build_filelist.c
├── cutils.c
├── cutils.h
├── fbuf.h
├── fs.c
├── fs.h
├── fs_disk.c
├── fs_net.c
├── fs_utils.c
├── fs_utils.h
├── fs_wget.c
├── fs_wget.h
├── ide.c
├── ide.h
├── iomem.c
├── iomem.h
├── json.c
├── json.h
├── list.h
├── machine.c
├── machine.h
├── netinit.sh
├── pci.c
├── pci.h
├── pckbd.c
├── ps2.c
├── ps2.h
├── riscv_cpu.c
├── riscv_cpu.h
├── riscv_cpu_fp_template.h
├── riscv_cpu_priv.h
├── riscv_cpu_template.h
├── riscv_cpu_xlen_typedefs.h
├── riscv_machine.c
├── riscvsim/
│ ├── bpu/
│ │ ├── adaptive_predictor.c
│ │ ├── adaptive_predictor.h
│ │ ├── bht.c
│ │ ├── bht.h
│ │ ├── bpu.c
│ │ ├── bpu.h
│ │ ├── btb.c
│ │ ├── btb.h
│ │ ├── ras.c
│ │ └── ras.h
│ ├── core/
│ │ ├── inorder.c
│ │ ├── inorder.h
│ │ ├── inorder_backend.c
│ │ ├── inorder_frontend.c
│ │ ├── ooo.c
│ │ ├── ooo.h
│ │ ├── ooo_backend.c
│ │ ├── ooo_branch.c
│ │ ├── ooo_frontend.c
│ │ ├── ooo_lsu.c
│ │ ├── riscv_sim_cpu.c
│ │ └── riscv_sim_cpu.h
│ ├── decoder/
│ │ ├── fp_decode_template.h
│ │ ├── fp_execute_template.h
│ │ ├── fp_string_generator_template.h
│ │ ├── riscv_instruction.h
│ │ ├── riscv_isa_decoder.c
│ │ ├── riscv_isa_execute.c
│ │ └── riscv_isa_string_generator.c
│ ├── memory_hierarchy/
│ │ ├── cache.c
│ │ ├── cache.h
│ │ ├── dram.c
│ │ ├── dram.h
│ │ ├── dramsim_wrapper.cpp
│ │ ├── dramsim_wrapper.h
│ │ ├── dramsim_wrapper_c_connector.cpp
│ │ ├── dramsim_wrapper_c_connector.h
│ │ ├── memory_controller.c
│ │ ├── memory_controller.h
│ │ ├── memory_controller_utils.h
│ │ ├── memory_hierarchy.c
│ │ ├── memory_hierarchy.h
│ │ ├── ramulator_wrapper.cpp
│ │ ├── ramulator_wrapper.h
│ │ ├── ramulator_wrapper_c_connector.cpp
│ │ ├── ramulator_wrapper_c_connector.h
│ │ ├── temu_mem_map_wrapper.c
│ │ └── temu_mem_map_wrapper.h
│ ├── riscv_sim_macros.h
│ ├── riscv_sim_typedefs.h
│ └── utils/
│ ├── circular_queue.c
│ ├── circular_queue.h
│ ├── cpu_latches.c
│ ├── cpu_latches.h
│ ├── evict_policy.c
│ ├── evict_policy.h
│ ├── sim_exception.c
│ ├── sim_exception.h
│ ├── sim_log.c
│ ├── sim_log.h
│ ├── sim_params.c
│ ├── sim_params.h
│ ├── sim_stats.c
│ ├── sim_stats.h
│ ├── sim_trace.c
│ └── sim_trace.h
├── rtc_timer.c
├── rtc_timer.h
├── sdl.c
├── sha256.c
├── sha256.h
├── simplefb.c
├── slirp/
│ ├── bootp.c
│ ├── bootp.h
│ ├── cksum.c
│ ├── debug.h
│ ├── if.c
│ ├── if.h
│ ├── ip.h
│ ├── ip_icmp.c
│ ├── ip_icmp.h
│ ├── ip_input.c
│ ├── ip_output.c
│ ├── libslirp.h
│ ├── main.h
│ ├── mbuf.c
│ ├── mbuf.h
│ ├── misc.c
│ ├── misc.h
│ ├── sbuf.c
│ ├── sbuf.h
│ ├── slirp.c
│ ├── slirp.h
│ ├── slirp_config.h
│ ├── socket.c
│ ├── socket.h
│ ├── tcp.h
│ ├── tcp_input.c
│ ├── tcp_output.c
│ ├── tcp_subr.c
│ ├── tcp_timer.c
│ ├── tcp_timer.h
│ ├── tcp_var.h
│ ├── tcpip.h
│ ├── tftp.h
│ ├── udp.c
│ └── udp.h
├── softfp.c
├── softfp.h
├── softfp_template.h
├── softfp_template_icvt.h
├── splitimg.c
├── stats_display.c
├── temu.c
├── vga.c
├── virtio.c
├── virtio.h
└── vmmouse.c
Copy disabled (too large)
Download .txt
Showing preview only (80,349K chars total). Download the full file to get everything.
SYMBOL INDEX (4111 symbols across 189 files)
FILE: src/DRAMsim3/ext/fmt/include/fmt/core.h
function FMT_BEGIN_NAMESPACE (line 187) | FMT_BEGIN_NAMESPACE
type Char (line 355) | typedef const Char *iterator;
function FMT_CONSTEXPR (line 357) | FMT_CONSTEXPR basic_string_view() FMT_NOEXCEPT : data_(FMT_NULL), size_(...
function FMT_CONSTEXPR (line 392) | FMT_CONSTEXPR void remove_prefix(size_t n) {
function compare (line 398) | int compare(basic_string_view other) const {
type basic_string_view (line 426) | typedef basic_string_view<char> string_view;
type basic_string_view (line 427) | typedef basic_string_view<wchar_t> wstring_view;
type compile_string (line 470) | struct compile_string {}
function namespace (line 505) | namespace internal {
type type (line 528) | enum type {
function FMT_CONSTEXPR (line 538) | FMT_CONSTEXPR bool is_integral(type t) {
function FMT_CONSTEXPR (line 543) | FMT_CONSTEXPR bool is_arithmetic(type t) {
function named_arg_base (line 609) | const named_arg_base<char_type> &as_named_arg() {
function format_custom_arg (line 616) | void format_custom_arg(const void *arg, Context &ctx) {
function FMT_CONSTEXPR (line 633) | FMT_CONSTEXPR init(const T &v) : val(v) {}
type std (line 658) | typedef std::conditional<sizeof(long) == sizeof(int), int, long long>::type
function custom_ (line 797) | custom_(custom) {}
function format (line 799) | void format(Context &ctx) const { custom_.format(custom_.value, ctx); }
type typename (line 829) | typedef typename Context::char_type char_type;
type typename (line 881) | typedef typename basic_string_view<Char>::iterator iterator;
function FMT_CONSTEXPR (line 897) | FMT_CONSTEXPR void advance_to(iterator it) {
function FMT_CONSTEXPR (line 904) | FMT_CONSTEXPR bool check_arg_id(unsigned) {
function check_arg_id (line 912) | void check_arg_id(basic_string_view<Char>) {}
function FMT_CONSTEXPR (line 914) | FMT_CONSTEXPR void on_error(const char *message) {
type typename (line 932) | typedef typename Context::char_type char_type;
type entry (line 934) | struct entry {
function push_back (line 942) | void push_back(value<Context> val) {
function class (line 964) | class locale_ref {
type basic_format_arg (line 992) | typedef basic_format_arg<Context> format_arg;
function format_arg (line 1009) | format_arg get_arg(unsigned arg_id) {
function on_error (line 1022) | void on_error(const char *message) { parse_context_.on_error(message); }
function iterator (line 1025) | iterator out() { return out_; }
function iterator (line 1026) | iterator begin() { return out_; }
function advance_to (line 1029) | void advance_to(iterator it) { out_ = it; }
function locale_ref (line 1031) | locale_ref locale() { return loc_; }
type value_type (line 1036) | typedef decltype(make_value<Context>(
function get_types (line 1042) | unsigned long long get_types() { return 0; }
function get_types (line 1045) | unsigned long long get_types() {
type formatter (line 1081) | typedef formatter<T, char_type> type;
type internal (line 1089) | typedef internal::context_base<OutputIt, basic_format_context, Char> base;
type typename (line 1090) | typedef typename base::format_arg format_arg;
function format_arg (line 1105) | format_arg next_arg() {
function format_arg (line 1108) | format_arg get_arg(unsigned arg_id) { return this->do_get_arg(arg_id); }
type basic_format_context (line 1117) | typedef basic_format_context<
type buffer_context (line 1120) | typedef buffer_context<char>::type format_context;
type buffer_context (line 1121) | typedef buffer_context<wchar_t>::type wformat_context;
type typename (line 1138) | typedef typename std::conditional<IS_PACKED,
function get_types (line 1148) | static FMT_CONSTEXPR11 long long get_types() {
function data_ (line 1170) | format_arg_store(const Args &... args)
type basic_format_arg (line 1200) | typedef basic_format_arg<Context> format_arg;
function typename (line 1216) | typename internal::type type(unsigned index) const {
function set_data (line 1225) | void set_data(const internal::value<Context> *values) { values_ = values; }
function set_data (line 1226) | void set_data(const format_arg *args) { args_ = args; }
function format_arg (line 1228) | format_arg do_get(size_type index) const {
function TYPES (line 1258) | long>(store.TYPES)) {
function format_arg (line 1273) | format_arg get(size_type index) const {
function max_size (line 1280) | unsigned max_size() const {
function namespace (line 1325) | namespace internal {
FILE: src/DRAMsim3/ext/fmt/include/fmt/format-inl.h
function fmt (line 58) | inline fmt::internal::null<> strerror_r(int, char *, ...) {
function fmt (line 61) | inline fmt::internal::null<> strerror_s(char *, std::size_t, ...) {
function FMT_BEGIN_NAMESPACE (line 65) | FMT_BEGIN_NAMESPACE
function format_error_code (line 157) | void format_error_code(internal::buffer &out, int error_code,
function report_error (line 184) | void report_error(FormatFunc func, int error_code,
function namespace (line 206) | namespace internal {
function Char (line 227) | Char internal::thousands_sep(locale_ref) {
function namespace (line 241) | namespace internal {
function FMT_FUNC (line 451) | FMT_FUNC fp get_cached_power(int min_exponent, int &pow10_exponent) {
type gen_digits_params (line 539) | struct gen_digits_params {
function insert (line 546) | struct prettify_handler {
function insert (line 565) | void insert(size_t pos, char c) {
function append (line 571) | void append(size_t n, char c) {
function append (line 576) | void append(char c) { data[size++] = c; }
function remove_trailing (line 578) | void remove_trailing(char c) {
function write_exponent (line 585) | void write_exponent(int exp, Handler &&h) {
type fill (line 606) | struct fill {
function grisu2_prettify (line 617) | void grisu2_prettify(const gen_digits_params ¶ms,
function insert (line 658) | struct char_counter {
function append (line 664) | void append(size_t n, char) { size += n; }
function append (line 665) | void append(char) { ++size; }
function remove_trailing (line 666) | void remove_trailing(char) {}
function char_counter (line 707) | char_counter counter{params.num_digits};
function FMT_FUNC (line 809) | FMT_FUNC internal::utf8_to_utf16::utf8_to_utf16(string_view s) {
function FMT_FUNC (line 833) | FMT_FUNC internal::utf16_to_utf8::utf16_to_utf8(wstring_view s) {
function FMT_FUNC (line 905) | FMT_FUNC void format_system_error(
function FMT_FUNC (line 932) | FMT_FUNC void report_system_error(
function FMT_FUNC (line 938) | FMT_FUNC void report_windows_error(
function FMT_FUNC (line 944) | FMT_FUNC void vprint(std::FILE *f, string_view format_str, format_args a...
function FMT_FUNC (line 951) | FMT_FUNC void vprint(std::FILE *f, wstring_view format_str, wformat_args...
function FMT_FUNC (line 957) | FMT_FUNC void vprint(string_view format_str, format_args args) {
function FMT_FUNC (line 961) | FMT_FUNC void vprint(wstring_view format_str, wformat_args args) {
FILE: src/DRAMsim3/ext/fmt/include/fmt/format.h
function FMT_BEGIN_NAMESPACE (line 101) | FMT_BEGIN_NAMESPACE
function FMT_BEGIN_NAMESPACE (line 187) | FMT_BEGIN_NAMESPACE
function FMT_BEGIN_NAMESPACE (line 235) | FMT_BEGIN_NAMESPACE
function FMT_END_NAMESPACE (line 295) | FMT_END_NAMESPACE
type sentinel (line 338) | typedef void sentinel;
type T (line 343) | typedef T value_type;
function explicit (line 345) | explicit output_range(OutputIt it): it_(it) {}
function base (line 358) | back_insert_range(typename base::iterator it): base(it) {}
type basic_writer (line 361) | typedef basic_writer<back_insert_range<internal::buffer>> writer;
type basic_writer (line 362) | typedef basic_writer<back_insert_range<internal::wbuffer>> wwriter;
function class (line 365) | class format_error : public std::runtime_error {
function namespace (line 374) | namespace internal {
type char8_t (line 404) | enum char8_t: unsigned char {}
function class (line 407) | class u8string_view : public basic_string_view<char8_t> {
type basic_memory_buffer (line 546) | typedef basic_memory_buffer<char> memory_buffer;
type basic_memory_buffer (line 547) | typedef basic_memory_buffer<wchar_t> wmemory_buffer;
function namespace (line 549) | namespace internal {
type Char (line 612) | typedef Char value_type;
type Char (line 613) | typedef const Char* pointer;
type Char (line 614) | typedef const Char& reference;
type std (line 615) | typedef std::random_access_iterator_tag iterator_category;
function FMT_CONSTEXPR (line 619) | FMT_CONSTEXPR null_terminating_iterator(const Char *ptr, const Char *end)
function explicit (line 623) | explicit null_terminating_iterator(const Range &r)
function T (line 690) | const T *pointer_from(const T *p) { return p; }
type T (line 707) | typedef T value_type;
type std (line 708) | typedef std::ptrdiff_t difference_type;
type T (line 709) | typedef T* pointer;
type T (line 710) | typedef T& reference;
type counting_iterator (line 711) | typedef counting_iterator _Unchecked_type;
type difference_type (line 743) | typedef void difference_type;
type pointer (line 744) | typedef void pointer;
type reference (line 745) | typedef void reference;
type truncating_iterator_base (line 746) | typedef truncating_iterator_base _Unchecked_type;
type std (line 761) | typedef std::iterator_traits<OutputIt> traits;
type typename (line 825) | typedef typename std::conditional<
function write_pair (line 936) | void write_pair(unsigned N, uint32_t index) {
function count_digits (line 984) | inline unsigned count_digits(uint32_t n) {
function enum (line 991) | struct no_thousands_sep {
function explicit (line 1012) | explicit add_thousands_sep(basic_string_view<Char> sep)
function Char (line 1030) | Char thousands_sep(locale_ref loc) {
function wchar_t (line 1035) | inline wchar_t thousands_sep(locale_ref loc) {
function Char (line 1043) | Char *format_decimal(Char *buffer, UInt value, unsigned num_digits,
function Iterator (line 1071) | Iterator format_decimal(
function It (line 1083) | It format_decimal(It out, UInt value, unsigned num_digits) {
function class (line 1121) | class utf8_to_utf16 {
function class (line 1135) | class utf16_to_utf8 {
type alignment (line 1161) | enum alignment {
type align_spec (line 1169) | struct align_spec {
type core_format_specs (line 1182) | struct core_format_specs {
function FMT_CONSTEXPR (line 1194) | FMT_CONSTEXPR basic_format_specs() {}
type basic_format_specs (line 1197) | typedef basic_format_specs<char> format_specs;
function namespace (line 1207) | namespace internal {
function handle_int_type_spec (line 1222) | void handle_int_type_spec(char spec, Handler &&handler) {
function handle_float_type_spec (line 1245) | void handle_float_type_spec(char spec, Handler &&handler) {
function handle_char_specs (line 1266) | void handle_char_specs(
function handle_cstring_type_spec (line 1276) | void handle_cstring_type_spec(Char spec, Handler &&handler) {
function check_string_type_spec (line 1286) | void check_string_type_spec(Char spec, ErrorHandler &&eh) {
function check_pointer_type_spec (line 1292) | void check_pointer_type_spec(Char spec, ErrorHandler &&eh) {
function FMT_CONSTEXPR (line 1302) | FMT_CONSTEXPR void on_dec() {}
function FMT_CONSTEXPR (line 1303) | FMT_CONSTEXPR void on_hex() {}
function FMT_CONSTEXPR (line 1304) | FMT_CONSTEXPR void on_bin() {}
function FMT_CONSTEXPR (line 1305) | FMT_CONSTEXPR void on_oct() {}
function FMT_CONSTEXPR (line 1306) | FMT_CONSTEXPR void on_num() {}
function FMT_CONSTEXPR (line 1308) | FMT_CONSTEXPR void on_error() {
function FMT_CONSTEXPR (line 1319) | FMT_CONSTEXPR void on_general() {}
function FMT_CONSTEXPR (line 1320) | FMT_CONSTEXPR void on_exp() {}
function FMT_CONSTEXPR (line 1321) | FMT_CONSTEXPR void on_fixed() {}
function FMT_CONSTEXPR (line 1322) | FMT_CONSTEXPR void on_hex() {}
function FMT_CONSTEXPR (line 1324) | FMT_CONSTEXPR void on_error() {
function FMT_CONSTEXPR (line 1338) | FMT_CONSTEXPR void on_int() {
function FMT_CONSTEXPR (line 1341) | FMT_CONSTEXPR void on_char() {}
function FMT_CONSTEXPR (line 1350) | FMT_CONSTEXPR void on_string() {}
function FMT_CONSTEXPR (line 1351) | FMT_CONSTEXPR void on_pointer() {}
type iterator (line 1391) | typedef decltype(internal::declval<Range>().begin()) iterator;
type basic_format_specs (line 1392) | typedef basic_format_specs<char_type> format_specs;
type char_writer (line 1399) | struct char_writer {
function write_char (line 1409) | void write_char(char_type value) {
function write_pointer (line 1416) | void write_pointer(const void *p) {
function format_specs (line 1425) | format_specs *spec() { return specs_; }
function iterator (line 1426) | iterator out() { return writer_.out(); }
function write (line 1428) | void write(bool value) {
function write (line 1433) | void write(const char_type *value) {
function error_handler (line 1476) | struct char_spec_handler : internal::error_handler {
function error_handler (line 1492) | struct cstring_spec_handler : internal::error_handler {
function iterator (line 1503) | iterator operator()(const char_type *value) {
function iterator (line 1510) | iterator operator()(basic_string_view<char_type> value) {
function iterator (line 1521) | iterator operator()(const void *value) {
function is_name_start (line 1530) | bool is_name_start(Char c) {
function parse_nonnegative_int (line 1569) | unsigned parse_nonnegative_int(
function const (line 1602) | bool operator()(typename basic_format_arg<Context>::handle h) const {
function handler_ (line 1622) | handler_(eh) {}
function handler_ (line 1647) | handler_(eh) {}
function specs_ (line 1673) | specs_(specs) {}
function FMT_CONSTEXPR (line 1675) | FMT_CONSTEXPR specs_setter(const specs_setter &other): specs_(other.spec...
function FMT_CONSTEXPR (line 1677) | FMT_CONSTEXPR void on_align(alignment align) { specs_.align_ = align; }
function FMT_CONSTEXPR (line 1678) | FMT_CONSTEXPR void on_fill(Char fill) { specs_.fill_ = fill; }
function FMT_CONSTEXPR (line 1679) | FMT_CONSTEXPR void on_plus() { specs_.flags |= SIGN_FLAG | PLUS_FLAG; }
function FMT_CONSTEXPR (line 1680) | FMT_CONSTEXPR void on_minus() { specs_.flags |= MINUS_FLAG; }
function FMT_CONSTEXPR (line 1681) | FMT_CONSTEXPR void on_space() { specs_.flags |= SIGN_FLAG; }
function FMT_CONSTEXPR (line 1682) | FMT_CONSTEXPR void on_hash() { specs_.flags |= HASH_FLAG; }
function FMT_CONSTEXPR (line 1684) | FMT_CONSTEXPR void on_zero() {
function FMT_CONSTEXPR (line 1689) | FMT_CONSTEXPR void on_width(unsigned width) { specs_.width_ = width; }
function FMT_CONSTEXPR (line 1690) | FMT_CONSTEXPR void on_precision(unsigned precision) {
function FMT_CONSTEXPR (line 1693) | FMT_CONSTEXPR void end_precision() {}
function FMT_CONSTEXPR (line 1695) | FMT_CONSTEXPR void on_type(Char type) {
function FMT_CONSTEXPR (line 1720) | FMT_CONSTEXPR void on_plus() {
function FMT_CONSTEXPR (line 1725) | FMT_CONSTEXPR void on_minus() {
function FMT_CONSTEXPR (line 1730) | FMT_CONSTEXPR void on_space() {
function FMT_CONSTEXPR (line 1735) | FMT_CONSTEXPR void on_hash() {
function FMT_CONSTEXPR (line 1740) | FMT_CONSTEXPR void on_zero() {
function FMT_CONSTEXPR (line 1745) | FMT_CONSTEXPR void end_precision() {
function FMT_CONSTEXPR (line 1756) | FMT_CONSTEXPR void check_sign() {
type auto_id (line 1778) | struct auto_id {}
function FMT_CONSTEXPR (line 1786) | FMT_CONSTEXPR specs_handler(
function on_dynamic_width (line 1791) | void on_dynamic_width(Id arg_id) {
function on_dynamic_precision (line 1797) | void on_dynamic_precision(Id arg_id) {
function on_error (line 1802) | void on_error(const char *message) {
type Kind (line 1823) | enum Kind { NONE, INDEX, NAME }
function FMT_CONSTEXPR (line 1826) | FMT_CONSTEXPR explicit arg_ref(unsigned index) : kind(INDEX), index(inde...
function explicit (line 1827) | explicit arg_ref(basic_string_view<Char> nm) : kind(NAME) {
function on_dynamic_width (line 1870) | void on_dynamic_width(Id arg_id) {
function on_dynamic_precision (line 1875) | void on_dynamic_precision(Id arg_id) {
function FMT_CONSTEXPR (line 1879) | FMT_CONSTEXPR void on_error(const char *message) {
function arg_ref_type (line 1887) | arg_ref_type make_arg_ref(Id arg_id) {
function make_arg_ref (line 1892) | make_arg_ref(auto_id) {
function Iterator (line 1901) | Iterator parse_arg_id(Iterator it, IDHandler &&handler) {
function Char (line 1931) | const Char *parse_arg_id(
function handler (line 1957) | handler(h) {}
function FMT_CONSTEXPR (line 1959) | FMT_CONSTEXPR void operator()() { handler.on_dynamic_width(auto_id()); }
function FMT_CONSTEXPR (line 1960) | FMT_CONSTEXPR void operator()(unsigned id) { handler.on_dynamic_width(id...
function FMT_CONSTEXPR (line 1965) | FMT_CONSTEXPR void on_error(const char *message) {
function handler (line 1975) | handler(h) {}
function FMT_CONSTEXPR (line 1977) | FMT_CONSTEXPR void operator()() { handler.on_dynamic_precision(auto_id()...
function FMT_CONSTEXPR (line 1978) | FMT_CONSTEXPR void operator()(unsigned id) {
function FMT_CONSTEXPR (line 1985) | FMT_CONSTEXPR void on_error(const char *message) { handler.on_error(mess...
function Iterator (line 1996) | Iterator parse_format_specs(Iterator it, SpecHandler &&handler) {
function find (line 2100) | bool find(Ptr first, Ptr last, T value, Ptr &out) {
function FMT_CONSTEXPR (line 2117) | FMT_CONSTEXPR void operator()() { handler.on_arg_id(); }
function FMT_CONSTEXPR (line 2118) | FMT_CONSTEXPR void operator()(unsigned id) { handler.on_arg_id(id); }
function FMT_CONSTEXPR (line 2122) | FMT_CONSTEXPR void on_error(const char *message) {
function typename (line 2184) | const typename ParseContext::char_type *
type internal (line 2199) | typedef internal::null_terminating_iterator<Char> iterator;
function FMT_CONSTEXPR (line 2201) | FMT_CONSTEXPR void on_text(const Char *, const Char *) {}
function FMT_CONSTEXPR (line 2203) | FMT_CONSTEXPR void on_arg_id() {
function FMT_CONSTEXPR (line 2207) | FMT_CONSTEXPR void on_arg_id(unsigned id) {
function FMT_CONSTEXPR (line 2231) | FMT_CONSTEXPR void check_arg_id() {
type Char (line 2237) | typedef const Char *(*parse_func)(parse_context_type &);
type typename (line 2255) | typedef typename S::char_type char_t;
type typename (line 2271) | typedef typename Context::char_type char_type;
type internal (line 2296) | typedef internal::arg_formatter_base<Range> base;
type basic_format_context (line 2297) | typedef basic_format_context<typename
type typename (line 2303) | typedef typename base::iterator iterator;
type typename (line 2304) | typedef typename base::format_specs format_specs;
function explicit (line 2313) | explicit arg_formatter(context_type &ctx, format_specs *spec = FMT_NULL)
function iterator (line 2323) | iterator operator()(typename basic_format_arg<context_type>::handle hand...
type iterator (line 2397) | typedef decltype(internal::declval<Range>().begin()) iterator;
type basic_format_specs (line 2398) | typedef basic_format_specs<char_type> format_specs;
function decltype (line 2408) | auto reserve(std::size_t n) -> decltype(internal::reserve(out_, n)) {
type typename (line 2466) | typedef typename internal::int_traits<Int>::main_type main_type;
type typename (line 2481) | typedef typename internal::int_traits<Int>::main_type unsigned_type;
type dec_writer (line 2515) | struct dec_writer {
function on_dec (line 2525) | void on_dec() {
type hex_writer (line 2531) | struct hex_writer {
function on_hex (line 2542) | void on_hex() {
function on_bin (line 2563) | void on_bin() {
function on_oct (line 2573) | void on_oct() {
type num_writer (line 2587) | struct num_writer {
function on_num (line 2600) | void on_num() {
function on_error (line 2608) | void on_error() {
function width (line 2622) | struct inf_or_nan_writer {
function write (line 2696) | void write(int value) { write_decimal(value); }
function write (line 2697) | void write(long value) { write_decimal(value); }
function write (line 2698) | void write(long long value) { write_decimal(value); }
function write (line 2700) | void write(unsigned value) { write_decimal(value); }
function write (line 2701) | void write(unsigned long value) { write_decimal(value); }
function write (line 2702) | void write(unsigned long long value) { write_decimal(value); }
function write (line 2717) | void write(double value) {
function write (line 2727) | void write(long double value) {
function write (line 2732) | void write(char value) {
function write (line 2735) | void write(wchar_t value) {
function write (line 2745) | void write(string_view value) {
function write (line 2749) | void write(wstring_view value) {
function on_exp (line 2806) | struct float_spec_handler {
function on_fixed (line 2824) | void on_fixed() {
function on_hex (line 2834) | void on_hex() {
function on_error (line 2839) | void on_error() {
type write_inf_or_nan_t (line 2861) | struct write_inf_or_nan_t {
function class (line 2914) | class windows_error : public system_error {
function class (line 2961) | class format_int {
function explicit (line 3003) | explicit format_int(long value) { format_signed(value); }
function explicit (line 3004) | explicit format_int(long long value) { format_signed(value); }
function explicit (line 3005) | explicit format_int(unsigned value) : str_(format_decimal(value)) {}
function explicit (line 3006) | explicit format_int(unsigned long value) : str_(format_decimal(value)) {}
function explicit (line 3007) | explicit format_int(unsigned long long value) : str_(format_decimal(valu...
type typename (line 3042) | typedef typename internal::int_traits<T>::main_type main_type;
function typename (line 3073) | typename ParseContext::iterator parse(ParseContext &ctx) {
type output_range (line 3130) | typedef output_range<typename
type null_handler (line 3153) | struct null_handler
function on_align (line 3154) | void on_align(alignment) {}
function on_plus (line 3155) | void on_plus() {}
function on_minus (line 3156) | void on_minus() {}
function on_space (line 3157) | void on_space() {}
function on_hash (line 3158) | void on_hash() {}
type output_range (line 3186) | typedef output_range<typename
type internal (line 3218) | typedef internal::null_terminating_iterator<Char> iterator;
type typename (line 3219) | typedef typename ArgFormatter::range range;
function on_arg_id (line 3234) | void on_arg_id() { arg = context.next_arg(); }
function on_arg_id (line 3235) | void on_arg_id(unsigned id) {
function on_arg_id (line 3239) | void on_arg_id(basic_string_view<Char> id) {
function on_replacement_field (line 3243) | void on_replacement_field(const Char *p) {
function iterator (line 3250) | iterator on_format_specs(iterator it) {
type formatter (line 3306) | typedef formatter<typename
function string (line 3359) | string to_string(const T &value) {
function wstring (line 3370) | wstring to_wstring(const T &value) {
type back_insert_range (line 3386) | typedef back_insert_range<internal::basic_buffer<Char> > range;
type typename (line 3406) | typedef typename buffer_context<Char>::type context;
function namespace (line 3412) | namespace internal {
type type (line 3449) | typedef decltype(test<It>(typename it_category<It>::type{})) type;
type typename (line 3450) | typedef typename std::remove_reference<type>::type result;
type typename (line 3494) | typedef typename format_context_t<OutputIt, FMT_CHAR(S)>::type context;
type basic_format_args (line 3514) | typedef basic_format_args<
type Char (line 3552) | typedef FMT_CHAR(S) Char;
function namespace (line 3580) | namespace internal {
function namespace (line 3621) | inline namespace literals {
FILE: src/DRAMsim3/ext/headers/INIReader.h
function ini_parse_stream (line 169) | inline int ini_parse_stream(ini_reader reader, void* stream, ini_handler...
function ini_parse_file (line 281) | inline int ini_parse_file(FILE* file, ini_handler handler, void* user)
function ini_parse (line 287) | inline int ini_parse(const char* filename, ini_handler handler, void* user)
function INIReader (line 368) | inline INIReader::INIReader(string filename)
function string (line 383) | inline string INIReader::Get(string section, string name, string default...
function GetInteger (line 389) | inline long INIReader::GetInteger(string section, string name, long defa...
function GetReal (line 399) | inline double INIReader::GetReal(string section, string name, double def...
function GetBoolean (line 408) | inline bool INIReader::GetBoolean(string section, string name, bool defa...
function string (line 421) | inline string INIReader::MakeKey(string section, string name)
function ValueHandler (line 429) | inline int INIReader::ValueHandler(void* user, const char* section, cons...
FILE: src/DRAMsim3/ext/headers/args.hxx
type args (line 50) | namespace args
function get (line 59) | auto get(Option &option_) -> decltype(option_.Get())
function Glyphs (line 72) | std::string::size_type Glyphs(const std::string &string_)
function Wrap (line 94) | std::vector<std::string> Wrap(const std::string &in, const std::string...
type Error (line 153) | enum class Error
method Error (line 169) | Error(const std::string &problem) : std::runtime_error(problem) {}
class Error (line 166) | class Error : public std::runtime_error
method Error (line 169) | Error(const std::string &problem) : std::runtime_error(problem) {}
class UsageError (line 175) | class UsageError : public Error
method UsageError (line 178) | UsageError(const std::string &problem) : Error(problem) {}
class ParseError (line 184) | class ParseError : public Error
method ParseError (line 187) | ParseError(const std::string &problem) : Error(problem) {}
class ValidationError (line 193) | class ValidationError : public Error
method ValidationError (line 196) | ValidationError(const std::string &problem) : Error(problem) {}
class MapError (line 202) | class MapError : public ParseError
method MapError (line 205) | MapError(const std::string &problem) : ParseError(problem) {}
class ExtraError (line 211) | class ExtraError : public ParseError
method ExtraError (line 214) | ExtraError(const std::string &problem) : ParseError(problem) {}
class Help (line 220) | class Help : public Error
method Help (line 223) | Help(const std::string &flag) : Error(flag) {}
type EitherFlag (line 230) | struct EitherFlag
method EitherFlag (line 235) | EitherFlag(const std::string &flag) : isShort(false), shortFlag(), l...
method EitherFlag (line 236) | EitherFlag(const char *flag) : isShort(false), shortFlag(), longFlag...
method EitherFlag (line 237) | EitherFlag(const char flag) : isShort(true), shortFlag(flag), longFl...
method GetLong (line 241) | static std::unordered_set<std::string> GetLong(std::initializer_list...
method GetShort (line 256) | static std::unordered_set<char> GetShort(std::initializer_list<Eithe...
class Matcher (line 278) | class Matcher
method Matcher (line 290) | Matcher(ShortIt shortFlagsStart, ShortIt shortFlagsEnd, LongIt longF...
method Matcher (line 300) | Matcher(Short &&shortIn, Long &&longIn) :
method Matcher (line 316) | Matcher(std::initializer_list<EitherFlag> in) :
method Matcher (line 319) | Matcher(Matcher &&other) : shortFlags(std::move(other.shortFlags)), ...
method Match (line 326) | bool Match(const char flag) const
method Match (line 333) | bool Match(const std::string &flag) const
method GetFlagStrings (line 340) | std::vector<std::string> GetFlagStrings(const std::string &shortPref...
method GetFlagStrings (line 357) | std::vector<std::string> GetFlagStrings(const std::string &shortPref...
class Base (line 376) | class Base
method Base (line 387) | Base(const std::string &help_) : matched(false), help(help_) {}
method Matched (line 390) | virtual bool Matched() const noexcept
method GetDescription (line 400) | virtual std::tuple<std::string, std::string> GetDescription(const st...
method Reset (line 407) | virtual void Reset() noexcept
method Error (line 417) | virtual Error GetError() const
class NamedBase (line 426) | class NamedBase : public Base
method NamedBase (line 433) | NamedBase(const std::string &name_, const std::string &help_) : Base...
method GetDescription (line 436) | virtual std::tuple<std::string, std::string> GetDescription(const st...
method Name (line 443) | virtual std::string Name() const
method KickOut (line 449) | void KickOut(bool kickout_) noexcept
method KickOut (line 455) | bool KickOut() const noexcept
class FlagBase (line 463) | class FlagBase : public NamedBase
method FlagBase (line 472) | FlagBase(const std::string &name_, const std::string &help_, Matcher...
method FlagBase (line 476) | virtual FlagBase *Match(const std::string &flag)
method FlagBase (line 496) | virtual FlagBase *Match(const char flag)
method GetDescription (line 516) | virtual std::tuple<std::string, std::string> GetDescription(const st...
class ValueFlagBase (line 537) | class ValueFlagBase : public FlagBase
method ValueFlagBase (line 540) | ValueFlagBase(const std::string &name_, const std::string &help_, Ma...
method GetDescription (line 544) | virtual std::tuple<std::string, std::string> GetDescription(const st...
class PositionalBase (line 565) | class PositionalBase : public NamedBase
method PositionalBase (line 571) | PositionalBase(const std::string &name_, const std::string &help_) :...
method Ready (line 574) | bool Ready()
method Reset (line 581) | virtual void Reset() noexcept override
class Group (line 593) | class Group : public Base
type Validators (line 602) | struct Validators
method Xor (line 604) | static bool Xor(const Group &group)
method AtLeastOne (line 609) | static bool AtLeastOne(const Group &group)
method AtMostOne (line 614) | static bool AtMostOne(const Group &group)
method All (line 619) | static bool All(const Group &group)
method AllOrNone (line 624) | static bool AllOrNone(const Group &group)
method AllChildGroups (line 629) | static bool AllChildGroups(const Group &group)
method DontCare (line 636) | static bool DontCare(const Group &group)
method CareTooMuch (line 641) | static bool CareTooMuch(const Group &group)
method None (line 646) | static bool None(const Group &group)
method Group (line 652) | Group(const std::string &help_ = std::string(), const std::function<...
method Group (line 654) | Group(Group &group_, const std::string &help_ = std::string(), const...
method FlagBase (line 666) | FlagBase *Match(const T &flag)
method PositionalBase (line 691) | PositionalBase *GetNextPositional()
method HasFlag (line 713) | bool HasFlag() const
method Add (line 734) | void Add(Base &child)
method MatchedChildren (line 748) | std::vector<Base *>::size_type MatchedChildren() const
method Matched (line 755) | virtual bool Matched() const noexcept override
method Get (line 762) | bool Get() const
method GetChildDescriptions (line 769) | std::vector<std::tuple<std::string, std::string, unsigned int>> GetC...
method GetPosNames (line 799) | std::vector<std::string> GetPosNames() const
method Reset (line 819) | virtual void Reset() noexcept override
method Error (line 832) | virtual Error GetError() const override
class ArgumentParser (line 854) | class ArgumentParser : public Group
type HelpParams (line 877) | struct HelpParams
method ArgumentParser (line 917) | ArgumentParser(const std::string &description_, const std::string &e...
method Prog (line 936) | void Prog(const std::string &prog_)
method ProglinePostfix (line 945) | void ProglinePostfix(const std::string &proglinePostfix_)
method Description (line 954) | void Description(const std::string &description_)
method Epilog (line 963) | void Epilog(const std::string &epilog_)
method LongPrefix (line 972) | void LongPrefix(const std::string &longprefix_)
method ShortPrefix (line 981) | void ShortPrefix(const std::string &shortprefix_)
method LongSeparator (line 990) | void LongSeparator(const std::string &longseparator_)
method Terminator (line 1011) | void Terminator(const std::string &terminator_)
method GetArgumentSeparations (line 1018) | void GetArgumentSeparations(
method SetArgumentSeparations (line 1037) | void SetArgumentSeparations(
method Help (line 1051) | void Help(std::ostream &help) const
method Help (line 1152) | std::string Help() const
method It (line 1166) | It ParseArgs(It begin, It end)
method ParseArgs (line 1390) | auto ParseArgs(const T &args) -> decltype(std::begin(args))
method ParseCLI (line 1401) | bool ParseCLI(const int argc, const char * const * argv)
class Flag (line 1420) | class Flag : public FlagBase
method Flag (line 1423) | Flag(Group &group_, const std::string &name_, const std::string &hel...
method Get (line 1432) | bool Get() const
class HelpFlag (line 1442) | class HelpFlag : public Flag
method HelpFlag (line 1445) | HelpFlag(Group &group_, const std::string &name_, const std::string ...
method FlagBase (line 1449) | virtual FlagBase *Match(const std::string &arg) override
method FlagBase (line 1463) | virtual FlagBase *Match(const char arg) override
method Get (line 1479) | bool Get() const noexcept
class CounterFlag (line 1487) | class CounterFlag : public Flag
method CounterFlag (line 1494) | CounterFlag(Group &group_, const std::string &name_, const std::stri...
method FlagBase (line 1498) | virtual FlagBase *Match(const std::string &arg) override
method FlagBase (line 1508) | virtual FlagBase *Match(const char arg) override
method Reset (line 1525) | virtual void Reset() noexcept override
type ValueReader (line 1538) | struct ValueReader
type ValueReader<std::string> (line 1565) | struct ValueReader<std::string>
class ValueFlag (line 1582) | class ValueFlag : public ValueFlagBase
method ValueFlag (line 1590) | ValueFlag(Group &group_, const std::string &name_, const std::string...
method ParseValue (line 1597) | virtual void ParseValue(const std::string &value_) override
method T (line 1611) | T &Get() noexcept
class ValueFlagList (line 1627) | class ValueFlagList : public ValueFlagBase
method ValueFlagList (line 1635) | ValueFlagList(Group &group_, const std::string &name_, const std::st...
method ParseValue (line 1642) | virtual void ParseValue(const std::string &value_) override
method Name (line 1663) | virtual std::string Name() const override
method Reset (line 1668) | virtual void Reset() noexcept override
class MapFlag (line 1687) | class MapFlag : public ValueFlagBase
method MapFlag (line 1696) | MapFlag(Group &group_, const std::string &name_, const std::string &...
method ParseValue (line 1703) | virtual void ParseValue(const std::string &value_) override
method T (line 1732) | T &Get() noexcept
class MapFlagList (line 1752) | class MapFlagList : public ValueFlagBase
method MapFlagList (line 1761) | MapFlagList(Group &group_, const std::string &name_, const std::stri...
method ParseValue (line 1768) | virtual void ParseValue(const std::string &value) override
method Name (line 1802) | virtual std::string Name() const override
method Reset (line 1807) | virtual void Reset() noexcept override
class Positional (line 1822) | class Positional : public PositionalBase
method Positional (line 1828) | Positional(Group &group_, const std::string &name_, const std::strin...
method ParseValue (line 1835) | virtual void ParseValue(const std::string &value_) override
method T (line 1851) | T &Get() noexcept
class PositionalList (line 1867) | class PositionalList : public PositionalBase
method PositionalList (line 1874) | PositionalList(Group &group_, const std::string &name_, const std::s...
method ParseValue (line 1881) | virtual void ParseValue(const std::string &value_) override
method Name (line 1896) | virtual std::string Name() const override
method Reset (line 1908) | virtual void Reset() noexcept override
class MapPositional (line 1927) | class MapPositional : public PositionalBase
method MapPositional (line 1936) | MapPositional(Group &group_, const std::string &name_, const std::st...
method ParseValue (line 1943) | virtual void ParseValue(const std::string &value_) override
method T (line 1974) | T &Get() noexcept
class MapPositionalList (line 1994) | class MapPositionalList : public PositionalBase
method MapPositionalList (line 2003) | MapPositionalList(Group &group_, const std::string &name_, const std...
method ParseValue (line 2010) | virtual void ParseValue(const std::string &value_) override
method Name (line 2045) | virtual std::string Name() const override
method Reset (line 2050) | virtual void Reset() noexcept override
FILE: src/DRAMsim3/ext/headers/catch.hpp
type Catch (line 95) | namespace Catch {
type CaseSensitive (line 401) | struct CaseSensitive { enum Choice {
type Choice (line 401) | enum Choice {
class NonCopyable (line 406) | class NonCopyable {
method NonCopyable (line 407) | NonCopyable( NonCopyable const& ) = delete;
method NonCopyable (line 408) | NonCopyable( NonCopyable && ) = delete;
method NonCopyable (line 409) | NonCopyable& operator = ( NonCopyable const& ) = delete;
method NonCopyable (line 410) | NonCopyable& operator = ( NonCopyable && ) = delete;
type SourceLineInfo (line 417) | struct SourceLineInfo {
method SourceLineInfo (line 419) | SourceLineInfo() = delete;
method SourceLineInfo (line 420) | SourceLineInfo( char const* _file, std::size_t _line ) noexcept
method SourceLineInfo (line 425) | SourceLineInfo( SourceLineInfo const& other ) = default;
method SourceLineInfo (line 426) | SourceLineInfo& operator = ( SourceLineInfo const& ) = default;
method SourceLineInfo (line 427) | SourceLineInfo( SourceLineInfo&& ) noexcept = default;
method SourceLineInfo (line 428) | SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default;
type StreamEndStop (line 449) | struct StreamEndStop {
function T (line 453) | T const& operator + ( T const& value, StreamEndStop ) {
type RegistrarForTagAliases (line 464) | struct RegistrarForTagAliases {
class TestSpec (line 484) | class TestSpec
type Pattern (line 4511) | struct Pattern {
class NamePattern (line 4517) | class NamePattern : public Pattern {
class TagPattern (line 4526) | class TagPattern : public Pattern {
class ExcludedPattern (line 4535) | class ExcludedPattern : public Pattern {
type Filter (line 4544) | struct Filter {
type ITestInvoker (line 486) | struct ITestInvoker {
class TestCase (line 491) | class TestCase
type IConfig (line 492) | struct IConfig
type ITestCaseRegistry (line 494) | struct ITestCaseRegistry {
class StringRef (line 522) | class StringRef {
method StringRef (line 539) | StringRef() noexcept
method StringRef (line 543) | StringRef( StringRef const& other ) noexcept
method StringRef (line 548) | StringRef( StringRef&& other ) noexcept
method StringRef (line 558) | StringRef( char const* rawChars, size_type size ) noexcept
method StringRef (line 563) | StringRef( std::string const& stdString ) noexcept
method empty (line 591) | auto empty() const noexcept -> bool {
method size (line 594) | auto size() const noexcept -> size_type {
type is_unique (line 649) | struct is_unique : std::true_type{}
type TypeList (line 751) | struct TypeList {}
type append (line 754) | struct append
type rewrap (line 778) | struct rewrap
type combine (line 797) | struct combine {
type with_types (line 799) | struct with_types {
type into (line 801) | struct into {
type always_false (line 808) | struct always_false : std::false_type {}
class TestInvokerAsMethod (line 816) | class TestInvokerAsMethod : public ITestInvoker {
method TestInvokerAsMethod (line 819) | TestInvokerAsMethod( void (C::*testAsMethod)() ) noexcept : m_testAs...
method invoke (line 821) | void invoke() const override {
function makeTestInvoker (line 830) | auto makeTestInvoker( void (C::*testAsMethod)() ) noexcept -> ITestInv...
type NameAndTags (line 834) | struct NameAndTags {
type AutoReg (line 840) | struct AutoReg : NonCopyable {
type ResultWas (line 1063) | struct ResultWas { enum OfType {
type OfType (line 1063) | enum OfType {
type ResultDisposition (line 1087) | struct ResultDisposition { enum Flags {
type Flags (line 1087) | enum Flags {
function isFalseTest (line 1098) | inline bool isFalseTest( int flags ) { return ( flags & ResultDisposit...
type AssertionInfo (line 1106) | struct AssertionInfo
class StringRef (line 1141) | class StringRef
method StringRef (line 539) | StringRef() noexcept
method StringRef (line 543) | StringRef( StringRef const& other ) noexcept
method StringRef (line 548) | StringRef( StringRef&& other ) noexcept
method StringRef (line 558) | StringRef( char const* rawChars, size_type size ) noexcept
method StringRef (line 563) | StringRef( std::string const& stdString ) noexcept
method empty (line 591) | auto empty() const noexcept -> bool {
method size (line 594) | auto size() const noexcept -> size_type {
type IStream (line 1143) | struct IStream {
class ReusableStringStream (line 1150) | class ReusableStringStream {
method get (line 1164) | auto get() -> std::ostream& { return *m_oss; }
type Detail (line 1226) | namespace Detail {
function rawMemoryToString (line 1233) | std::string rawMemoryToString( const T& object ) {
class IsStreamInsertable (line 1238) | class IsStreamInsertable {
function convertUnstreamable (line 1254) | typename std::enable_if<
function convertUnstreamable (line 1260) | typename std::enable_if<
function convertUnstreamable (line 1267) | typename std::enable_if<
function stringify (line 1318) | std::string stringify(const T& e) {
function convertUnknownEnumToString (line 1323) | std::string convertUnknownEnumToString( E e ) {
function rangeToString (line 1494) | std::string rangeToString(InputIterator first, InputIterator last) {
function stringify (line 1524) | inline std::string stringify( NSString* nsstring ) {
type TupleElementPrinter (line 1592) | struct TupleElementPrinter {
method print (line 1593) | static void print(const Tuple& tuple, std::ostream& os) {
type TupleElementPrinter<Tuple, N, false> (line 1604) | struct TupleElementPrinter<Tuple, N, false> {
method print (line 1605) | static void print(const Tuple&, std::ostream&) {}
class Approx (line 2739) | class Approx {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
function Approx (line 5951) | Approx Approx::custom() {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
function Approx (line 5955) | Approx Approx::operator-() const {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
type Endianness (line 12350) | struct Endianness {
type Arch (line 12351) | enum Arch { Big, Little }
method Arch (line 12353) | static Arch which() {
function rawMemoryToString (line 12365) | std::string rawMemoryToString( const void *object, std::size_t size ) {
type StringMaker (line 1289) | struct StringMaker {
method convert (line 1291) | static
method convert (line 1302) | static
type Detail (line 1313) | namespace Detail {
function rawMemoryToString (line 1233) | std::string rawMemoryToString( const T& object ) {
class IsStreamInsertable (line 1238) | class IsStreamInsertable {
function convertUnstreamable (line 1254) | typename std::enable_if<
function convertUnstreamable (line 1260) | typename std::enable_if<
function convertUnstreamable (line 1267) | typename std::enable_if<
function stringify (line 1318) | std::string stringify(const T& e) {
function convertUnknownEnumToString (line 1323) | std::string convertUnknownEnumToString( E e ) {
function rangeToString (line 1494) | std::string rangeToString(InputIterator first, InputIterator last) {
function stringify (line 1524) | inline std::string stringify( NSString* nsstring ) {
type TupleElementPrinter (line 1592) | struct TupleElementPrinter {
method print (line 1593) | static void print(const Tuple& tuple, std::ostream& os) {
type TupleElementPrinter<Tuple, N, false> (line 1604) | struct TupleElementPrinter<Tuple, N, false> {
method print (line 1605) | static void print(const Tuple&, std::ostream&) {}
class Approx (line 2739) | class Approx {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
function Approx (line 5951) | Approx Approx::custom() {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
function Approx (line 5955) | Approx Approx::operator-() const {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
type Endianness (line 12350) | struct Endianness {
type Arch (line 12351) | enum Arch { Big, Little }
method Arch (line 12353) | static Arch which() {
function rawMemoryToString (line 12365) | std::string rawMemoryToString( const void *object, std::size_t size ) {
type StringMaker<std::string> (line 1339) | struct StringMaker<std::string> {
type StringMaker<std::string_view> (line 1345) | struct StringMaker<std::string_view> {
type StringMaker<char const *> (line 1351) | struct StringMaker<char const *> {
type StringMaker<char *> (line 1355) | struct StringMaker<char *> {
type StringMaker<std::wstring> (line 1361) | struct StringMaker<std::wstring> {
type StringMaker<std::wstring_view> (line 1367) | struct StringMaker<std::wstring_view> {
type StringMaker<wchar_t const *> (line 1373) | struct StringMaker<wchar_t const *> {
type StringMaker<wchar_t *> (line 1377) | struct StringMaker<wchar_t *> {
type StringMaker<char[SZ]> (line 1385) | struct StringMaker<char[SZ]> {
method convert (line 1386) | static std::string convert(char const* str) {
type StringMaker<signed char[SZ]> (line 1391) | struct StringMaker<signed char[SZ]> {
method convert (line 1392) | static std::string convert(signed char const* str) {
type StringMaker<unsigned char[SZ]> (line 1397) | struct StringMaker<unsigned char[SZ]> {
method convert (line 1398) | static std::string convert(unsigned char const* str) {
type StringMaker<int> (line 1404) | struct StringMaker<int> {
type StringMaker<long> (line 1408) | struct StringMaker<long> {
type StringMaker<long long> (line 1412) | struct StringMaker<long long> {
type StringMaker<unsigned int> (line 1416) | struct StringMaker<unsigned int> {
type StringMaker<unsigned long> (line 1420) | struct StringMaker<unsigned long> {
type StringMaker<unsigned long long> (line 1424) | struct StringMaker<unsigned long long> {
type StringMaker<bool> (line 1429) | struct StringMaker<bool> {
type StringMaker<char> (line 1434) | struct StringMaker<char> {
type StringMaker<signed char> (line 1438) | struct StringMaker<signed char> {
type StringMaker<unsigned char> (line 1442) | struct StringMaker<unsigned char> {
type StringMaker<std::nullptr_t> (line 1447) | struct StringMaker<std::nullptr_t> {
type StringMaker<float> (line 1452) | struct StringMaker<float> {
type StringMaker<double> (line 1456) | struct StringMaker<double> {
type StringMaker<T*> (line 1461) | struct StringMaker<T*> {
method convert (line 1463) | static std::string convert(U* p) {
type StringMaker<R C::*> (line 1473) | struct StringMaker<R C::*> {
method convert (line 1474) | static std::string convert(R C::* p) {
type StringMaker<T^> (line 1485) | struct StringMaker<T^> {
method convert (line 1486) | static std::string convert( T^ ref ) {
type Detail (line 1492) | namespace Detail {
function rawMemoryToString (line 1233) | std::string rawMemoryToString( const T& object ) {
class IsStreamInsertable (line 1238) | class IsStreamInsertable {
function convertUnstreamable (line 1254) | typename std::enable_if<
function convertUnstreamable (line 1260) | typename std::enable_if<
function convertUnstreamable (line 1267) | typename std::enable_if<
function stringify (line 1318) | std::string stringify(const T& e) {
function convertUnknownEnumToString (line 1323) | std::string convertUnknownEnumToString( E e ) {
function rangeToString (line 1494) | std::string rangeToString(InputIterator first, InputIterator last) {
function stringify (line 1524) | inline std::string stringify( NSString* nsstring ) {
type TupleElementPrinter (line 1592) | struct TupleElementPrinter {
method print (line 1593) | static void print(const Tuple& tuple, std::ostream& os) {
type TupleElementPrinter<Tuple, N, false> (line 1604) | struct TupleElementPrinter<Tuple, N, false> {
method print (line 1605) | static void print(const Tuple&, std::ostream&) {}
class Approx (line 2739) | class Approx {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
function Approx (line 5951) | Approx Approx::custom() {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
function Approx (line 5955) | Approx Approx::operator-() const {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
type Endianness (line 12350) | struct Endianness {
type Arch (line 12351) | enum Arch { Big, Little }
method Arch (line 12353) | static Arch which() {
function rawMemoryToString (line 12365) | std::string rawMemoryToString( const void *object, std::size_t size ) {
type StringMaker<NSString*> (line 1509) | struct StringMaker<NSString*> {
method convert (line 1510) | static std::string convert(NSString * nsstring) {
type StringMaker<NSObject*> (line 1517) | struct StringMaker<NSObject*> {
method convert (line 1518) | static std::string convert(NSObject* nsObject) {
type Detail (line 1523) | namespace Detail {
function rawMemoryToString (line 1233) | std::string rawMemoryToString( const T& object ) {
class IsStreamInsertable (line 1238) | class IsStreamInsertable {
function convertUnstreamable (line 1254) | typename std::enable_if<
function convertUnstreamable (line 1260) | typename std::enable_if<
function convertUnstreamable (line 1267) | typename std::enable_if<
function stringify (line 1318) | std::string stringify(const T& e) {
function convertUnknownEnumToString (line 1323) | std::string convertUnknownEnumToString( E e ) {
function rangeToString (line 1494) | std::string rangeToString(InputIterator first, InputIterator last) {
function stringify (line 1524) | inline std::string stringify( NSString* nsstring ) {
type TupleElementPrinter (line 1592) | struct TupleElementPrinter {
method print (line 1593) | static void print(const Tuple& tuple, std::ostream& os) {
type TupleElementPrinter<Tuple, N, false> (line 1604) | struct TupleElementPrinter<Tuple, N, false> {
method print (line 1605) | static void print(const Tuple&, std::ostream&) {}
class Approx (line 2739) | class Approx {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
function Approx (line 5951) | Approx Approx::custom() {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
function Approx (line 5955) | Approx Approx::operator-() const {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
type Endianness (line 12350) | struct Endianness {
type Arch (line 12351) | enum Arch { Big, Little }
method Arch (line 12353) | static Arch which() {
function rawMemoryToString (line 12365) | std::string rawMemoryToString( const void *object, std::size_t size ) {
type StringMaker<std::pair<T1, T2> > (line 1550) | struct StringMaker<std::pair<T1, T2> > {
method convert (line 1551) | static std::string convert(const std::pair<T1, T2>& pair) {
type StringMaker<std::optional<T> > (line 1568) | struct StringMaker<std::optional<T> > {
method convert (line 1569) | static std::string convert(const std::optional<T>& optional) {
type Detail (line 1586) | namespace Detail {
function rawMemoryToString (line 1233) | std::string rawMemoryToString( const T& object ) {
class IsStreamInsertable (line 1238) | class IsStreamInsertable {
function convertUnstreamable (line 1254) | typename std::enable_if<
function convertUnstreamable (line 1260) | typename std::enable_if<
function convertUnstreamable (line 1267) | typename std::enable_if<
function stringify (line 1318) | std::string stringify(const T& e) {
function convertUnknownEnumToString (line 1323) | std::string convertUnknownEnumToString( E e ) {
function rangeToString (line 1494) | std::string rangeToString(InputIterator first, InputIterator last) {
function stringify (line 1524) | inline std::string stringify( NSString* nsstring ) {
type TupleElementPrinter (line 1592) | struct TupleElementPrinter {
method print (line 1593) | static void print(const Tuple& tuple, std::ostream& os) {
type TupleElementPrinter<Tuple, N, false> (line 1604) | struct TupleElementPrinter<Tuple, N, false> {
method print (line 1605) | static void print(const Tuple&, std::ostream&) {}
class Approx (line 2739) | class Approx {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
function Approx (line 5951) | Approx Approx::custom() {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
function Approx (line 5955) | Approx Approx::operator-() const {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
type Endianness (line 12350) | struct Endianness {
type Arch (line 12351) | enum Arch { Big, Little }
method Arch (line 12353) | static Arch which() {
function rawMemoryToString (line 12365) | std::string rawMemoryToString( const void *object, std::size_t size ) {
type StringMaker<std::monostate> (line 1627) | struct StringMaker<std::monostate> {
method convert (line 1628) | static std::string convert(const std::monostate&) {
type not_this_one (line 1652) | struct not_this_one {}
type is_range (line 1662) | struct is_range {
type is_range<T^> (line 1670) | struct is_range<T^> {
function rangeToString (line 1676) | std::string rangeToString( Range const& range ) {
function rangeToString (line 1682) | std::string rangeToString( std::vector<bool, Allocator> const& v ) {
type StringMaker<R, typename std::enable_if<is_range<R>::value && !::Catch::Detail::IsStreamInsertable<R>::value>::type> (line 1698) | struct StringMaker<R, typename std::enable_if<is_range<R>::value && !:...
method convert (line 1699) | static std::string convert( R const& range ) {
type StringMaker<T[SZ]> (line 1705) | struct StringMaker<T[SZ]> {
method convert (line 1706) | static std::string convert(T const(&arr)[SZ]) {
type ratio_string (line 1722) | struct ratio_string {
type ratio_string<std::atto> (line 1734) | struct ratio_string<std::atto> {
type ratio_string<std::femto> (line 1738) | struct ratio_string<std::femto> {
type ratio_string<std::pico> (line 1742) | struct ratio_string<std::pico> {
type ratio_string<std::nano> (line 1746) | struct ratio_string<std::nano> {
type ratio_string<std::micro> (line 1750) | struct ratio_string<std::micro> {
type ratio_string<std::milli> (line 1754) | struct ratio_string<std::milli> {
type StringMaker<std::chrono::duration<Value, Ratio>> (line 1761) | struct StringMaker<std::chrono::duration<Value, Ratio>> {
method convert (line 1762) | static std::string convert(std::chrono::duration<Value, Ratio> const...
type StringMaker<std::chrono::duration<Value, std::ratio<1>>> (line 1769) | struct StringMaker<std::chrono::duration<Value, std::ratio<1>>> {
method convert (line 1770) | static std::string convert(std::chrono::duration<Value, std::ratio<1...
type StringMaker<std::chrono::duration<Value, std::ratio<60>>> (line 1777) | struct StringMaker<std::chrono::duration<Value, std::ratio<60>>> {
method convert (line 1778) | static std::string convert(std::chrono::duration<Value, std::ratio<6...
type StringMaker<std::chrono::duration<Value, std::ratio<3600>>> (line 1785) | struct StringMaker<std::chrono::duration<Value, std::ratio<3600>>> {
method convert (line 1786) | static std::string convert(std::chrono::duration<Value, std::ratio<3...
type StringMaker<std::chrono::time_point<Clock, Duration>> (line 1797) | struct StringMaker<std::chrono::time_point<Clock, Duration>> {
method convert (line 1798) | static std::string convert(std::chrono::time_point<Clock, Duration> ...
type StringMaker<std::chrono::time_point<std::chrono::system_clock, Duration>> (line 1804) | struct StringMaker<std::chrono::time_point<std::chrono::system_clock, ...
method convert (line 1805) | static std::string convert(std::chrono::time_point<std::chrono::syst...
type ITransientExpression (line 1848) | struct ITransientExpression {
method isBinaryExpression (line 1849) | auto isBinaryExpression() const -> bool { return m_isBinaryExpressio...
method getResult (line 1850) | auto getResult() const -> bool { return m_result; }
method ITransientExpression (line 1853) | ITransientExpression( bool isBinaryExpression, bool result )
class BinaryExpr (line 1870) | class BinaryExpr : public ITransientExpression {
method streamReconstructedExpression (line 1875) | void streamReconstructedExpression( std::ostream &os ) const override {
method BinaryExpr (line 1881) | BinaryExpr( bool comparisonResult, LhsT lhs, StringRef op, RhsT rhs )
class UnaryExpr (line 1946) | class UnaryExpr : public ITransientExpression {
method streamReconstructedExpression (line 1949) | void streamReconstructedExpression( std::ostream &os ) const override {
method UnaryExpr (line 1954) | explicit UnaryExpr( LhsT lhs )
function compareEqual (line 1962) | auto compareEqual( LhsT const& lhs, RhsT const& rhs ) -> bool { return...
function compareEqual (line 1964) | auto compareEqual( T* const& lhs, int rhs ) -> bool { return lhs == re...
function compareEqual (line 1966) | auto compareEqual( T* const& lhs, long rhs ) -> bool { return lhs == r...
function compareEqual (line 1968) | auto compareEqual( int lhs, T* const& rhs ) -> bool { return reinterpr...
function compareEqual (line 1970) | auto compareEqual( long lhs, T* const& rhs ) -> bool { return reinterp...
function compareNotEqual (line 1973) | auto compareNotEqual( LhsT const& lhs, RhsT&& rhs ) -> bool { return s...
function compareNotEqual (line 1975) | auto compareNotEqual( T* const& lhs, int rhs ) -> bool { return lhs !=...
function compareNotEqual (line 1977) | auto compareNotEqual( T* const& lhs, long rhs ) -> bool { return lhs !...
function compareNotEqual (line 1979) | auto compareNotEqual( int lhs, T* const& rhs ) -> bool { return reinte...
function compareNotEqual (line 1981) | auto compareNotEqual( long lhs, T* const& rhs ) -> bool { return reint...
class ExprLhs (line 1984) | class ExprLhs {
method ExprLhs (line 1987) | explicit ExprLhs( LhsT lhs ) : m_lhs( lhs ) {}
method makeUnaryExpr (line 2036) | auto makeUnaryExpr() const -> UnaryExpr<LhsT> {
function handleExpression (line 2044) | void handleExpression( ExprLhs<T> const& expr ) {
type Decomposer (line 2048) | struct Decomposer {
class AssertionResult (line 2072) | class AssertionResult
method AssertionResult (line 4771) | AssertionResult() = delete;
type AssertionInfo (line 2073) | struct AssertionInfo
type SectionInfo (line 2074) | struct SectionInfo
method SectionInfo (line 2490) | SectionInfo
type SectionEndInfo (line 2075) | struct SectionEndInfo
type MessageInfo (line 2076) | struct MessageInfo
type MessageBuilder (line 2077) | struct MessageBuilder
method MessageBuilder (line 2258) | MessageBuilder& operator << ( T const& value ) {
type Counts (line 2078) | struct Counts
type BenchmarkInfo (line 2079) | struct BenchmarkInfo
type BenchmarkStats (line 2080) | struct BenchmarkStats
type AssertionReaction (line 2081) | struct AssertionReaction
type SourceLineInfo (line 2082) | struct SourceLineInfo
method SourceLineInfo (line 419) | SourceLineInfo() = delete;
method SourceLineInfo (line 420) | SourceLineInfo( char const* _file, std::size_t _line ) noexcept
method SourceLineInfo (line 425) | SourceLineInfo( SourceLineInfo const& other ) = default;
method SourceLineInfo (line 426) | SourceLineInfo& operator = ( SourceLineInfo const& ) = default;
method SourceLineInfo (line 427) | SourceLineInfo( SourceLineInfo&& ) noexcept = default;
method SourceLineInfo (line 428) | SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default;
type ITransientExpression (line 2084) | struct ITransientExpression
method isBinaryExpression (line 1849) | auto isBinaryExpression() const -> bool { return m_isBinaryExpressio...
method getResult (line 1850) | auto getResult() const -> bool { return m_result; }
method ITransientExpression (line 1853) | ITransientExpression( bool isBinaryExpression, bool result )
type IGeneratorTracker (line 2085) | struct IGeneratorTracker
type IResultCapture (line 2087) | struct IResultCapture {
type TestFailureException (line 2146) | struct TestFailureException{}
type AssertionResultData (line 2147) | struct AssertionResultData
method AssertionResultData (line 4757) | AssertionResultData() = delete;
type IResultCapture (line 2148) | struct IResultCapture
class RunContext (line 2149) | class RunContext
method RunContext (line 6138) | RunContext( RunContext const& ) = delete;
method RunContext (line 6139) | RunContext& operator =( RunContext const& ) = delete;
class LazyExpression (line 2151) | class LazyExpression {
method LazyExpression (line 2161) | LazyExpression& operator = ( LazyExpression const& ) = delete;
type AssertionReaction (line 2168) | struct AssertionReaction {
class AssertionHandler (line 2173) | class AssertionHandler {
method handleExpr (line 2192) | void handleExpr( ExprLhs<T> const& expr ) {
type MessageInfo (line 2224) | struct MessageInfo {
type MessageStream (line 2241) | struct MessageStream {
method MessageStream (line 2244) | MessageStream& operator << ( T const& value ) {
type MessageBuilder (line 2252) | struct MessageBuilder : MessageStream {
method MessageBuilder (line 2258) | MessageBuilder& operator << ( T const& value ) {
class ScopedMessage (line 2266) | class ScopedMessage {
method ScopedMessage (line 2269) | ScopedMessage( ScopedMessage& duplicate ) = delete;
class Capturer (line 2277) | class Capturer {
method captureValues (line 2288) | void captureValues( size_t index, T const& value ) {
method captureValues (line 2293) | void captureValues( size_t index, T const& value, Ts const&... value...
type Counts (line 2453) | struct Counts {
type Totals (line 2466) | struct Totals {
type SectionInfo (line 2484) | struct SectionInfo {
method SectionInfo (line 2490) | SectionInfo
type SectionEndInfo (line 2500) | struct SectionEndInfo {
class Timer (line 2518) | class Timer {
class Section (line 2535) | class Section : NonCopyable {
class BenchmarkLooper (line 2572) | class BenchmarkLooper {
method BenchmarkLooper (line 2583) | BenchmarkLooper( StringRef name )
method increment (line 2597) | void increment() {
class TestCase (line 2620) | class TestCase
type ITestCaseRegistry (line 2621) | struct ITestCaseRegistry
type IExceptionTranslatorRegistry (line 2622) | struct IExceptionTranslatorRegistry
type IExceptionTranslator (line 2623) | struct IExceptionTranslator
type IReporterRegistry (line 2624) | struct IReporterRegistry
type IReporterFactory (line 2625) | struct IReporterFactory
type ITagAliasRegistry (line 2626) | struct ITagAliasRegistry
class StartupExceptionRegistry (line 2627) | class StartupExceptionRegistry
type IRegistryHub (line 2631) | struct IRegistryHub {
type IMutableRegistryHub (line 2643) | struct IMutableRegistryHub {
type IExceptionTranslator (line 2673) | struct IExceptionTranslator
type IExceptionTranslator (line 2676) | struct IExceptionTranslator {
type IExceptionTranslatorRegistry (line 2681) | struct IExceptionTranslatorRegistry {
class ExceptionTranslatorRegistrar (line 2687) | class ExceptionTranslatorRegistrar {
class ExceptionTranslator (line 2689) | class ExceptionTranslator : public IExceptionTranslator {
method ExceptionTranslator (line 2692) | ExceptionTranslator( std::string(*translateFunction)( T& ) )
method translate (line 2696) | std::string translate( ExceptionTranslators::const_iterator it, Ex...
method ExceptionTranslatorRegistrar (line 2714) | ExceptionTranslatorRegistrar( std::string(*translateFunction)( T& ) ) {
type Detail (line 2737) | namespace Detail {
function rawMemoryToString (line 1233) | std::string rawMemoryToString( const T& object ) {
class IsStreamInsertable (line 1238) | class IsStreamInsertable {
function convertUnstreamable (line 1254) | typename std::enable_if<
function convertUnstreamable (line 1260) | typename std::enable_if<
function convertUnstreamable (line 1267) | typename std::enable_if<
function stringify (line 1318) | std::string stringify(const T& e) {
function convertUnknownEnumToString (line 1323) | std::string convertUnknownEnumToString( E e ) {
function rangeToString (line 1494) | std::string rangeToString(InputIterator first, InputIterator last) {
function stringify (line 1524) | inline std::string stringify( NSString* nsstring ) {
type TupleElementPrinter (line 1592) | struct TupleElementPrinter {
method print (line 1593) | static void print(const Tuple& tuple, std::ostream& os) {
type TupleElementPrinter<Tuple, N, false> (line 1604) | struct TupleElementPrinter<Tuple, N, false> {
method print (line 1605) | static void print(const Tuple&, std::ostream&) {}
class Approx (line 2739) | class Approx {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
function Approx (line 5951) | Approx Approx::custom() {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
function Approx (line 5955) | Approx Approx::operator-() const {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
type Endianness (line 12350) | struct Endianness {
type Arch (line 12351) | enum Arch { Big, Little }
method Arch (line 12353) | static Arch which() {
function rawMemoryToString (line 12365) | std::string rawMemoryToString( const void *object, std::size_t size ) {
type literals (line 2840) | namespace literals {
type StringMaker<Catch::Detail::Approx> (line 2846) | struct StringMaker<Catch::Detail::Approx> {
type pluralise (line 2870) | struct pluralise {
type Matchers (line 2890) | namespace Matchers {
type Impl (line 2891) | namespace Impl {
type MatchAllOf (line 2893) | struct MatchAllOf
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2894) | struct MatchAnyOf
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2895) | struct MatchNotOf
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
class MatcherUntypedBase (line 2897) | class MatcherUntypedBase {
method MatcherUntypedBase (line 2899) | MatcherUntypedBase() = default;
method MatcherUntypedBase (line 2900) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
method MatcherUntypedBase (line 2901) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
type MatcherMethod (line 2916) | struct MatcherMethod {
type MatcherBase (line 2925) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
type MatchAllOf (line 2933) | struct MatchAllOf : MatcherBase<ArgT> {
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2965) | struct MatchAnyOf : MatcherBase<ArgT> {
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2999) | struct MatchNotOf : MatcherBase<ArgT> {
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
type Floating (line 3044) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
type Generic (line 3086) | namespace Generic {
type Detail (line 3088) | namespace Detail {
class PredicateMatcher (line 3093) | class PredicateMatcher : public MatcherBase<T> {
method PredicateMatcher (line 3098) | PredicateMatcher(std::function<bool(T const&)> const& elem, std:...
method match (line 3103) | bool match( T const& item ) const override {
method describe (line 3107) | std::string describe() const override {
function Predicate (line 3119) | Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)>...
type StdString (line 3134) | namespace StdString {
type CasedString (line 3136) | struct CasedString
type StringMatcherBase (line 3146) | struct StringMatcherBase : MatcherBase<std::string> {
type EqualsMatcher (line 3154) | struct EqualsMatcher : StringMatcherBase {
type ContainsMatcher (line 3158) | struct ContainsMatcher : StringMatcherBase {
type StartsWithMatcher (line 3162) | struct StartsWithMatcher : StringMatcherBase {
type EndsWithMatcher (line 3166) | struct EndsWithMatcher : StringMatcherBase {
type RegexMatcher (line 3171) | struct RegexMatcher : MatcherBase<std::string> {
type Vector (line 3203) | namespace Vector {
type Detail (line 3204) | namespace Detail {
function count (line 3206) | size_t count(InputIterator first, InputIterator last, T const& i...
function contains (line 3216) | bool contains(InputIterator first, InputIterator last, T const& ...
type ContainsElementMatcher (line 3227) | struct ContainsElementMatcher : MatcherBase<std::vector<T>> {
method ContainsElementMatcher (line 3229) | ContainsElementMatcher(T const &comparator) : m_comparator( comp...
method match (line 3231) | bool match(std::vector<T> const &v) const override {
method describe (line 3240) | std::string describe() const override {
type ContainsMatcher (line 3248) | struct ContainsMatcher : MatcherBase<std::vector<T>> {
method ContainsMatcher (line 3250) | ContainsMatcher(std::vector<T> const &comparator) : m_comparator...
method match (line 3252) | bool match(std::vector<T> const &v) const override {
method describe (line 3270) | std::string describe() const override {
type EqualsMatcher (line 3278) | struct EqualsMatcher : MatcherBase<std::vector<T>> {
method EqualsMatcher (line 3280) | EqualsMatcher(std::vector<T> const &comparator) : m_comparator( ...
method match (line 3282) | bool match(std::vector<T> const &v) const override {
method describe (line 3294) | std::string describe() const override {
type UnorderedEqualsMatcher (line 3301) | struct UnorderedEqualsMatcher : MatcherBase<std::vector<T>> {
method UnorderedEqualsMatcher (line 3302) | UnorderedEqualsMatcher(std::vector<T> const& target) : m_target(...
method match (line 3303) | bool match(std::vector<T> const& vec) const override {
method describe (line 3333) | std::string describe() const override {
function Contains (line 3346) | Vector::ContainsMatcher<T> Contains( std::vector<T> const& comparato...
function VectorContains (line 3351) | Vector::ContainsElementMatcher<T> VectorContains( T const& comparato...
function Equals (line 3356) | Vector::EqualsMatcher<T> Equals( std::vector<T> const& comparator ) {
function UnorderedEquals (line 3361) | Vector::UnorderedEqualsMatcher<T> UnorderedEquals(std::vector<T> con...
type Impl (line 9239) | namespace Impl {
type MatchAllOf (line 2893) | struct MatchAllOf
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2894) | struct MatchAnyOf
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2895) | struct MatchNotOf
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
class MatcherUntypedBase (line 2897) | class MatcherUntypedBase {
method MatcherUntypedBase (line 2899) | MatcherUntypedBase() = default;
method MatcherUntypedBase (line 2900) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
method MatcherUntypedBase (line 2901) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
type MatcherMethod (line 2916) | struct MatcherMethod {
type MatcherBase (line 2925) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
type MatchAllOf (line 2933) | struct MatchAllOf : MatcherBase<ArgT> {
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2965) | struct MatchAnyOf : MatcherBase<ArgT> {
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2999) | struct MatchNotOf : MatcherBase<ArgT> {
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
type Floating (line 9291) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
type Floating (line 9352) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
function WithinULP (line 9402) | Floating::WithinUlpsMatcher WithinULP(double target, int maxUlpDiff) {
function WithinULP (line 9406) | Floating::WithinUlpsMatcher WithinULP(float target, int maxUlpDiff) {
function WithinAbs (line 9410) | Floating::WithinAbsMatcher WithinAbs(double target, double margin) {
type StdString (line 9435) | namespace StdString {
type CasedString (line 3136) | struct CasedString
type StringMatcherBase (line 3146) | struct StringMatcherBase : MatcherBase<std::string> {
type EqualsMatcher (line 3154) | struct EqualsMatcher : StringMatcherBase {
type ContainsMatcher (line 3158) | struct ContainsMatcher : StringMatcherBase {
type StartsWithMatcher (line 3162) | struct StartsWithMatcher : StringMatcherBase {
type EndsWithMatcher (line 3166) | struct EndsWithMatcher : StringMatcherBase {
type RegexMatcher (line 3171) | struct RegexMatcher : MatcherBase<std::string> {
function Equals (line 9510) | StdString::EqualsMatcher Equals( std::string const& str, CaseSensiti...
function Contains (line 9513) | StdString::ContainsMatcher Contains( std::string const& str, CaseSen...
function EndsWith (line 9516) | StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSen...
function StartsWith (line 9519) | StdString::StartsWithMatcher StartsWith( std::string const& str, Cas...
function Matches (line 9523) | StdString::RegexMatcher Matches(std::string const& regex, CaseSensit...
type Matchers (line 3042) | namespace Matchers {
type Impl (line 2891) | namespace Impl {
type MatchAllOf (line 2893) | struct MatchAllOf
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2894) | struct MatchAnyOf
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2895) | struct MatchNotOf
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
class MatcherUntypedBase (line 2897) | class MatcherUntypedBase {
method MatcherUntypedBase (line 2899) | MatcherUntypedBase() = default;
method MatcherUntypedBase (line 2900) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
method MatcherUntypedBase (line 2901) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
type MatcherMethod (line 2916) | struct MatcherMethod {
type MatcherBase (line 2925) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
type MatchAllOf (line 2933) | struct MatchAllOf : MatcherBase<ArgT> {
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2965) | struct MatchAnyOf : MatcherBase<ArgT> {
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2999) | struct MatchNotOf : MatcherBase<ArgT> {
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
type Floating (line 3044) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
type Generic (line 3086) | namespace Generic {
type Detail (line 3088) | namespace Detail {
class PredicateMatcher (line 3093) | class PredicateMatcher : public MatcherBase<T> {
method PredicateMatcher (line 3098) | PredicateMatcher(std::function<bool(T const&)> const& elem, std:...
method match (line 3103) | bool match( T const& item ) const override {
method describe (line 3107) | std::string describe() const override {
function Predicate (line 3119) | Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)>...
type StdString (line 3134) | namespace StdString {
type CasedString (line 3136) | struct CasedString
type StringMatcherBase (line 3146) | struct StringMatcherBase : MatcherBase<std::string> {
type EqualsMatcher (line 3154) | struct EqualsMatcher : StringMatcherBase {
type ContainsMatcher (line 3158) | struct ContainsMatcher : StringMatcherBase {
type StartsWithMatcher (line 3162) | struct StartsWithMatcher : StringMatcherBase {
type EndsWithMatcher (line 3166) | struct EndsWithMatcher : StringMatcherBase {
type RegexMatcher (line 3171) | struct RegexMatcher : MatcherBase<std::string> {
type Vector (line 3203) | namespace Vector {
type Detail (line 3204) | namespace Detail {
function count (line 3206) | size_t count(InputIterator first, InputIterator last, T const& i...
function contains (line 3216) | bool contains(InputIterator first, InputIterator last, T const& ...
type ContainsElementMatcher (line 3227) | struct ContainsElementMatcher : MatcherBase<std::vector<T>> {
method ContainsElementMatcher (line 3229) | ContainsElementMatcher(T const &comparator) : m_comparator( comp...
method match (line 3231) | bool match(std::vector<T> const &v) const override {
method describe (line 3240) | std::string describe() const override {
type ContainsMatcher (line 3248) | struct ContainsMatcher : MatcherBase<std::vector<T>> {
method ContainsMatcher (line 3250) | ContainsMatcher(std::vector<T> const &comparator) : m_comparator...
method match (line 3252) | bool match(std::vector<T> const &v) const override {
method describe (line 3270) | std::string describe() const override {
type EqualsMatcher (line 3278) | struct EqualsMatcher : MatcherBase<std::vector<T>> {
method EqualsMatcher (line 3280) | EqualsMatcher(std::vector<T> const &comparator) : m_comparator( ...
method match (line 3282) | bool match(std::vector<T> const &v) const override {
method describe (line 3294) | std::string describe() const override {
type UnorderedEqualsMatcher (line 3301) | struct UnorderedEqualsMatcher : MatcherBase<std::vector<T>> {
method UnorderedEqualsMatcher (line 3302) | UnorderedEqualsMatcher(std::vector<T> const& target) : m_target(...
method match (line 3303) | bool match(std::vector<T> const& vec) const override {
method describe (line 3333) | std::string describe() const override {
function Contains (line 3346) | Vector::ContainsMatcher<T> Contains( std::vector<T> const& comparato...
function VectorContains (line 3351) | Vector::ContainsElementMatcher<T> VectorContains( T const& comparato...
function Equals (line 3356) | Vector::EqualsMatcher<T> Equals( std::vector<T> const& comparator ) {
function UnorderedEquals (line 3361) | Vector::UnorderedEqualsMatcher<T> UnorderedEquals(std::vector<T> con...
type Impl (line 9239) | namespace Impl {
type MatchAllOf (line 2893) | struct MatchAllOf
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2894) | struct MatchAnyOf
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2895) | struct MatchNotOf
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
class MatcherUntypedBase (line 2897) | class MatcherUntypedBase {
method MatcherUntypedBase (line 2899) | MatcherUntypedBase() = default;
method MatcherUntypedBase (line 2900) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
method MatcherUntypedBase (line 2901) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
type MatcherMethod (line 2916) | struct MatcherMethod {
type MatcherBase (line 2925) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
type MatchAllOf (line 2933) | struct MatchAllOf : MatcherBase<ArgT> {
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2965) | struct MatchAnyOf : MatcherBase<ArgT> {
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2999) | struct MatchNotOf : MatcherBase<ArgT> {
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
type Floating (line 9291) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
type Floating (line 9352) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
function WithinULP (line 9402) | Floating::WithinUlpsMatcher WithinULP(double target, int maxUlpDiff) {
function WithinULP (line 9406) | Floating::WithinUlpsMatcher WithinULP(float target, int maxUlpDiff) {
function WithinAbs (line 9410) | Floating::WithinAbsMatcher WithinAbs(double target, double margin) {
type StdString (line 9435) | namespace StdString {
type CasedString (line 3136) | struct CasedString
type StringMatcherBase (line 3146) | struct StringMatcherBase : MatcherBase<std::string> {
type EqualsMatcher (line 3154) | struct EqualsMatcher : StringMatcherBase {
type ContainsMatcher (line 3158) | struct ContainsMatcher : StringMatcherBase {
type StartsWithMatcher (line 3162) | struct StartsWithMatcher : StringMatcherBase {
type EndsWithMatcher (line 3166) | struct EndsWithMatcher : StringMatcherBase {
type RegexMatcher (line 3171) | struct RegexMatcher : MatcherBase<std::string> {
function Equals (line 9510) | StdString::EqualsMatcher Equals( std::string const& str, CaseSensiti...
function Contains (line 9513) | StdString::ContainsMatcher Contains( std::string const& str, CaseSen...
function EndsWith (line 9516) | StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSen...
function StartsWith (line 9519) | StdString::StartsWithMatcher StartsWith( std::string const& str, Cas...
function Matches (line 9523) | StdString::RegexMatcher Matches(std::string const& regex, CaseSensit...
type Matchers (line 3085) | namespace Matchers {
type Impl (line 2891) | namespace Impl {
type MatchAllOf (line 2893) | struct MatchAllOf
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2894) | struct MatchAnyOf
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2895) | struct MatchNotOf
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
class MatcherUntypedBase (line 2897) | class MatcherUntypedBase {
method MatcherUntypedBase (line 2899) | MatcherUntypedBase() = default;
method MatcherUntypedBase (line 2900) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
method MatcherUntypedBase (line 2901) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
type MatcherMethod (line 2916) | struct MatcherMethod {
type MatcherBase (line 2925) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
type MatchAllOf (line 2933) | struct MatchAllOf : MatcherBase<ArgT> {
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2965) | struct MatchAnyOf : MatcherBase<ArgT> {
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2999) | struct MatchNotOf : MatcherBase<ArgT> {
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
type Floating (line 3044) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
type Generic (line 3086) | namespace Generic {
type Detail (line 3088) | namespace Detail {
class PredicateMatcher (line 3093) | class PredicateMatcher : public MatcherBase<T> {
method PredicateMatcher (line 3098) | PredicateMatcher(std::function<bool(T const&)> const& elem, std:...
method match (line 3103) | bool match( T const& item ) const override {
method describe (line 3107) | std::string describe() const override {
function Predicate (line 3119) | Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)>...
type StdString (line 3134) | namespace StdString {
type CasedString (line 3136) | struct CasedString
type StringMatcherBase (line 3146) | struct StringMatcherBase : MatcherBase<std::string> {
type EqualsMatcher (line 3154) | struct EqualsMatcher : StringMatcherBase {
type ContainsMatcher (line 3158) | struct ContainsMatcher : StringMatcherBase {
type StartsWithMatcher (line 3162) | struct StartsWithMatcher : StringMatcherBase {
type EndsWithMatcher (line 3166) | struct EndsWithMatcher : StringMatcherBase {
type RegexMatcher (line 3171) | struct RegexMatcher : MatcherBase<std::string> {
type Vector (line 3203) | namespace Vector {
type Detail (line 3204) | namespace Detail {
function count (line 3206) | size_t count(InputIterator first, InputIterator last, T const& i...
function contains (line 3216) | bool contains(InputIterator first, InputIterator last, T const& ...
type ContainsElementMatcher (line 3227) | struct ContainsElementMatcher : MatcherBase<std::vector<T>> {
method ContainsElementMatcher (line 3229) | ContainsElementMatcher(T const &comparator) : m_comparator( comp...
method match (line 3231) | bool match(std::vector<T> const &v) const override {
method describe (line 3240) | std::string describe() const override {
type ContainsMatcher (line 3248) | struct ContainsMatcher : MatcherBase<std::vector<T>> {
method ContainsMatcher (line 3250) | ContainsMatcher(std::vector<T> const &comparator) : m_comparator...
method match (line 3252) | bool match(std::vector<T> const &v) const override {
method describe (line 3270) | std::string describe() const override {
type EqualsMatcher (line 3278) | struct EqualsMatcher : MatcherBase<std::vector<T>> {
method EqualsMatcher (line 3280) | EqualsMatcher(std::vector<T> const &comparator) : m_comparator( ...
method match (line 3282) | bool match(std::vector<T> const &v) const override {
method describe (line 3294) | std::string describe() const override {
type UnorderedEqualsMatcher (line 3301) | struct UnorderedEqualsMatcher : MatcherBase<std::vector<T>> {
method UnorderedEqualsMatcher (line 3302) | UnorderedEqualsMatcher(std::vector<T> const& target) : m_target(...
method match (line 3303) | bool match(std::vector<T> const& vec) const override {
method describe (line 3333) | std::string describe() const override {
function Contains (line 3346) | Vector::ContainsMatcher<T> Contains( std::vector<T> const& comparato...
function VectorContains (line 3351) | Vector::ContainsElementMatcher<T> VectorContains( T const& comparato...
function Equals (line 3356) | Vector::EqualsMatcher<T> Equals( std::vector<T> const& comparator ) {
function UnorderedEquals (line 3361) | Vector::UnorderedEqualsMatcher<T> UnorderedEquals(std::vector<T> con...
type Impl (line 9239) | namespace Impl {
type MatchAllOf (line 2893) | struct MatchAllOf
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2894) | struct MatchAnyOf
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2895) | struct MatchNotOf
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
class MatcherUntypedBase (line 2897) | class MatcherUntypedBase {
method MatcherUntypedBase (line 2899) | MatcherUntypedBase() = default;
method MatcherUntypedBase (line 2900) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
method MatcherUntypedBase (line 2901) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
type MatcherMethod (line 2916) | struct MatcherMethod {
type MatcherBase (line 2925) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
type MatchAllOf (line 2933) | struct MatchAllOf : MatcherBase<ArgT> {
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2965) | struct MatchAnyOf : MatcherBase<ArgT> {
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2999) | struct MatchNotOf : MatcherBase<ArgT> {
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
type Floating (line 9291) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
type Floating (line 9352) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
function WithinULP (line 9402) | Floating::WithinUlpsMatcher WithinULP(double target, int maxUlpDiff) {
function WithinULP (line 9406) | Floating::WithinUlpsMatcher WithinULP(float target, int maxUlpDiff) {
function WithinAbs (line 9410) | Floating::WithinAbsMatcher WithinAbs(double target, double margin) {
type StdString (line 9435) | namespace StdString {
type CasedString (line 3136) | struct CasedString
type StringMatcherBase (line 3146) | struct StringMatcherBase : MatcherBase<std::string> {
type EqualsMatcher (line 3154) | struct EqualsMatcher : StringMatcherBase {
type ContainsMatcher (line 3158) | struct ContainsMatcher : StringMatcherBase {
type StartsWithMatcher (line 3162) | struct StartsWithMatcher : StringMatcherBase {
type EndsWithMatcher (line 3166) | struct EndsWithMatcher : StringMatcherBase {
type RegexMatcher (line 3171) | struct RegexMatcher : MatcherBase<std::string> {
function Equals (line 9510) | StdString::EqualsMatcher Equals( std::string const& str, CaseSensiti...
function Contains (line 9513) | StdString::ContainsMatcher Contains( std::string const& str, CaseSen...
function EndsWith (line 9516) | StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSen...
function StartsWith (line 9519) | StdString::StartsWithMatcher StartsWith( std::string const& str, Cas...
function Matches (line 9523) | StdString::RegexMatcher Matches(std::string const& regex, CaseSensit...
type Matchers (line 3132) | namespace Matchers {
type Impl (line 2891) | namespace Impl {
type MatchAllOf (line 2893) | struct MatchAllOf
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2894) | struct MatchAnyOf
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2895) | struct MatchNotOf
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
class MatcherUntypedBase (line 2897) | class MatcherUntypedBase {
method MatcherUntypedBase (line 2899) | MatcherUntypedBase() = default;
method MatcherUntypedBase (line 2900) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
method MatcherUntypedBase (line 2901) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
type MatcherMethod (line 2916) | struct MatcherMethod {
type MatcherBase (line 2925) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
type MatchAllOf (line 2933) | struct MatchAllOf : MatcherBase<ArgT> {
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2965) | struct MatchAnyOf : MatcherBase<ArgT> {
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2999) | struct MatchNotOf : MatcherBase<ArgT> {
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
type Floating (line 3044) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
type Generic (line 3086) | namespace Generic {
type Detail (line 3088) | namespace Detail {
class PredicateMatcher (line 3093) | class PredicateMatcher : public MatcherBase<T> {
method PredicateMatcher (line 3098) | PredicateMatcher(std::function<bool(T const&)> const& elem, std:...
method match (line 3103) | bool match( T const& item ) const override {
method describe (line 3107) | std::string describe() const override {
function Predicate (line 3119) | Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)>...
type StdString (line 3134) | namespace StdString {
type CasedString (line 3136) | struct CasedString
type StringMatcherBase (line 3146) | struct StringMatcherBase : MatcherBase<std::string> {
type EqualsMatcher (line 3154) | struct EqualsMatcher : StringMatcherBase {
type ContainsMatcher (line 3158) | struct ContainsMatcher : StringMatcherBase {
type StartsWithMatcher (line 3162) | struct StartsWithMatcher : StringMatcherBase {
type EndsWithMatcher (line 3166) | struct EndsWithMatcher : StringMatcherBase {
type RegexMatcher (line 3171) | struct RegexMatcher : MatcherBase<std::string> {
type Vector (line 3203) | namespace Vector {
type Detail (line 3204) | namespace Detail {
function count (line 3206) | size_t count(InputIterator first, InputIterator last, T const& i...
function contains (line 3216) | bool contains(InputIterator first, InputIterator last, T const& ...
type ContainsElementMatcher (line 3227) | struct ContainsElementMatcher : MatcherBase<std::vector<T>> {
method ContainsElementMatcher (line 3229) | ContainsElementMatcher(T const &comparator) : m_comparator( comp...
method match (line 3231) | bool match(std::vector<T> const &v) const override {
method describe (line 3240) | std::string describe() const override {
type ContainsMatcher (line 3248) | struct ContainsMatcher : MatcherBase<std::vector<T>> {
method ContainsMatcher (line 3250) | ContainsMatcher(std::vector<T> const &comparator) : m_comparator...
method match (line 3252) | bool match(std::vector<T> const &v) const override {
method describe (line 3270) | std::string describe() const override {
type EqualsMatcher (line 3278) | struct EqualsMatcher : MatcherBase<std::vector<T>> {
method EqualsMatcher (line 3280) | EqualsMatcher(std::vector<T> const &comparator) : m_comparator( ...
method match (line 3282) | bool match(std::vector<T> const &v) const override {
method describe (line 3294) | std::string describe() const override {
type UnorderedEqualsMatcher (line 3301) | struct UnorderedEqualsMatcher : MatcherBase<std::vector<T>> {
method UnorderedEqualsMatcher (line 3302) | UnorderedEqualsMatcher(std::vector<T> const& target) : m_target(...
method match (line 3303) | bool match(std::vector<T> const& vec) const override {
method describe (line 3333) | std::string describe() const override {
function Contains (line 3346) | Vector::ContainsMatcher<T> Contains( std::vector<T> const& comparato...
function VectorContains (line 3351) | Vector::ContainsElementMatcher<T> VectorContains( T const& comparato...
function Equals (line 3356) | Vector::EqualsMatcher<T> Equals( std::vector<T> const& comparator ) {
function UnorderedEquals (line 3361) | Vector::UnorderedEqualsMatcher<T> UnorderedEquals(std::vector<T> con...
type Impl (line 9239) | namespace Impl {
type MatchAllOf (line 2893) | struct MatchAllOf
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2894) | struct MatchAnyOf
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2895) | struct MatchNotOf
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
class MatcherUntypedBase (line 2897) | class MatcherUntypedBase {
method MatcherUntypedBase (line 2899) | MatcherUntypedBase() = default;
method MatcherUntypedBase (line 2900) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
method MatcherUntypedBase (line 2901) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
type MatcherMethod (line 2916) | struct MatcherMethod {
type MatcherBase (line 2925) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
type MatchAllOf (line 2933) | struct MatchAllOf : MatcherBase<ArgT> {
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2965) | struct MatchAnyOf : MatcherBase<ArgT> {
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2999) | struct MatchNotOf : MatcherBase<ArgT> {
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
type Floating (line 9291) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
type Floating (line 9352) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
function WithinULP (line 9402) | Floating::WithinUlpsMatcher WithinULP(double target, int maxUlpDiff) {
function WithinULP (line 9406) | Floating::WithinUlpsMatcher WithinULP(float target, int maxUlpDiff) {
function WithinAbs (line 9410) | Floating::WithinAbsMatcher WithinAbs(double target, double margin) {
type StdString (line 9435) | namespace StdString {
type CasedString (line 3136) | struct CasedString
type StringMatcherBase (line 3146) | struct StringMatcherBase : MatcherBase<std::string> {
type EqualsMatcher (line 3154) | struct EqualsMatcher : StringMatcherBase {
type ContainsMatcher (line 3158) | struct ContainsMatcher : StringMatcherBase {
type StartsWithMatcher (line 3162) | struct StartsWithMatcher : StringMatcherBase {
type EndsWithMatcher (line 3166) | struct EndsWithMatcher : StringMatcherBase {
type RegexMatcher (line 3171) | struct RegexMatcher : MatcherBase<std::string> {
function Equals (line 9510) | StdString::EqualsMatcher Equals( std::string const& str, CaseSensiti...
function Contains (line 9513) | StdString::ContainsMatcher Contains( std::string const& str, CaseSen...
function EndsWith (line 9516) | StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSen...
function StartsWith (line 9519) | StdString::StartsWithMatcher StartsWith( std::string const& str, Cas...
function Matches (line 9523) | StdString::RegexMatcher Matches(std::string const& regex, CaseSensit...
type Matchers (line 3201) | namespace Matchers {
type Impl (line 2891) | namespace Impl {
type MatchAllOf (line 2893) | struct MatchAllOf
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2894) | struct MatchAnyOf
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2895) | struct MatchNotOf
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
class MatcherUntypedBase (line 2897) | class MatcherUntypedBase {
method MatcherUntypedBase (line 2899) | MatcherUntypedBase() = default;
method MatcherUntypedBase (line 2900) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
method MatcherUntypedBase (line 2901) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
type MatcherMethod (line 2916) | struct MatcherMethod {
type MatcherBase (line 2925) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
type MatchAllOf (line 2933) | struct MatchAllOf : MatcherBase<ArgT> {
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2965) | struct MatchAnyOf : MatcherBase<ArgT> {
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2999) | struct MatchNotOf : MatcherBase<ArgT> {
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
type Floating (line 3044) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
type Generic (line 3086) | namespace Generic {
type Detail (line 3088) | namespace Detail {
class PredicateMatcher (line 3093) | class PredicateMatcher : public MatcherBase<T> {
method PredicateMatcher (line 3098) | PredicateMatcher(std::function<bool(T const&)> const& elem, std:...
method match (line 3103) | bool match( T const& item ) const override {
method describe (line 3107) | std::string describe() const override {
function Predicate (line 3119) | Generic::PredicateMatcher<T> Predicate(std::function<bool(T const&)>...
type StdString (line 3134) | namespace StdString {
type CasedString (line 3136) | struct CasedString
type StringMatcherBase (line 3146) | struct StringMatcherBase : MatcherBase<std::string> {
type EqualsMatcher (line 3154) | struct EqualsMatcher : StringMatcherBase {
type ContainsMatcher (line 3158) | struct ContainsMatcher : StringMatcherBase {
type StartsWithMatcher (line 3162) | struct StartsWithMatcher : StringMatcherBase {
type EndsWithMatcher (line 3166) | struct EndsWithMatcher : StringMatcherBase {
type RegexMatcher (line 3171) | struct RegexMatcher : MatcherBase<std::string> {
type Vector (line 3203) | namespace Vector {
type Detail (line 3204) | namespace Detail {
function count (line 3206) | size_t count(InputIterator first, InputIterator last, T const& i...
function contains (line 3216) | bool contains(InputIterator first, InputIterator last, T const& ...
type ContainsElementMatcher (line 3227) | struct ContainsElementMatcher : MatcherBase<std::vector<T>> {
method ContainsElementMatcher (line 3229) | ContainsElementMatcher(T const &comparator) : m_comparator( comp...
method match (line 3231) | bool match(std::vector<T> const &v) const override {
method describe (line 3240) | std::string describe() const override {
type ContainsMatcher (line 3248) | struct ContainsMatcher : MatcherBase<std::vector<T>> {
method ContainsMatcher (line 3250) | ContainsMatcher(std::vector<T> const &comparator) : m_comparator...
method match (line 3252) | bool match(std::vector<T> const &v) const override {
method describe (line 3270) | std::string describe() const override {
type EqualsMatcher (line 3278) | struct EqualsMatcher : MatcherBase<std::vector<T>> {
method EqualsMatcher (line 3280) | EqualsMatcher(std::vector<T> const &comparator) : m_comparator( ...
method match (line 3282) | bool match(std::vector<T> const &v) const override {
method describe (line 3294) | std::string describe() const override {
type UnorderedEqualsMatcher (line 3301) | struct UnorderedEqualsMatcher : MatcherBase<std::vector<T>> {
method UnorderedEqualsMatcher (line 3302) | UnorderedEqualsMatcher(std::vector<T> const& target) : m_target(...
method match (line 3303) | bool match(std::vector<T> const& vec) const override {
method describe (line 3333) | std::string describe() const override {
function Contains (line 3346) | Vector::ContainsMatcher<T> Contains( std::vector<T> const& comparato...
function VectorContains (line 3351) | Vector::ContainsElementMatcher<T> VectorContains( T const& comparato...
function Equals (line 3356) | Vector::EqualsMatcher<T> Equals( std::vector<T> const& comparator ) {
function UnorderedEquals (line 3361) | Vector::UnorderedEqualsMatcher<T> UnorderedEquals(std::vector<T> con...
type Impl (line 9239) | namespace Impl {
type MatchAllOf (line 2893) | struct MatchAllOf
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2894) | struct MatchAnyOf
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2895) | struct MatchNotOf
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
class MatcherUntypedBase (line 2897) | class MatcherUntypedBase {
method MatcherUntypedBase (line 2899) | MatcherUntypedBase() = default;
method MatcherUntypedBase (line 2900) | MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
method MatcherUntypedBase (line 2901) | MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = d...
type MatcherMethod (line 2916) | struct MatcherMethod {
type MatcherBase (line 2925) | struct MatcherBase : MatcherUntypedBase, MatcherMethod<T> {
type MatchAllOf (line 2933) | struct MatchAllOf : MatcherBase<ArgT> {
method match (line 2934) | bool match( ArgT const& arg ) const override {
method describe (line 2941) | std::string describe() const override {
type MatchAnyOf (line 2965) | struct MatchAnyOf : MatcherBase<ArgT> {
method match (line 2967) | bool match( ArgT const& arg ) const override {
method describe (line 2974) | std::string describe() const override {
type MatchNotOf (line 2999) | struct MatchNotOf : MatcherBase<ArgT> {
method MatchNotOf (line 3001) | MatchNotOf( MatcherBase<ArgT> const& underlyingMatcher ) : m_und...
method match (line 3003) | bool match( ArgT const& arg ) const override {
method describe (line 3007) | std::string describe() const override {
type Floating (line 9291) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
type Floating (line 9352) | namespace Floating {
type FloatingPointKind (line 3046) | enum class FloatingPointKind : uint8_t
type WithinAbsMatcher (line 3048) | struct WithinAbsMatcher : MatcherBase<double> {
type WithinUlpsMatcher (line 3057) | struct WithinUlpsMatcher : MatcherBase<double> {
type FloatingPointKind (line 9292) | enum class FloatingPointKind : uint8_t {
function WithinULP (line 9402) | Floating::WithinUlpsMatcher WithinULP(double target, int maxUlpDiff) {
function WithinULP (line 9406) | Floating::WithinUlpsMatcher WithinULP(float target, int maxUlpDiff) {
function WithinAbs (line 9410) | Floating::WithinAbsMatcher WithinAbs(double target, double margin) {
type StdString (line 9435) | namespace StdString {
type CasedString (line 3136) | struct CasedString
type StringMatcherBase (line 3146) | struct StringMatcherBase : MatcherBase<std::string> {
type EqualsMatcher (line 3154) | struct EqualsMatcher : StringMatcherBase {
type ContainsMatcher (line 3158) | struct ContainsMatcher : StringMatcherBase {
type StartsWithMatcher (line 3162) | struct StartsWithMatcher : StringMatcherBase {
type EndsWithMatcher (line 3166) | struct EndsWithMatcher : StringMatcherBase {
type RegexMatcher (line 3171) | struct RegexMatcher : MatcherBase<std::string> {
function Equals (line 9510) | StdString::EqualsMatcher Equals( std::string const& str, CaseSensiti...
function Contains (line 9513) | StdString::ContainsMatcher Contains( std::string const& str, CaseSen...
function EndsWith (line 9516) | StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSen...
function StartsWith (line 9519) | StdString::StartsWithMatcher StartsWith( std::string const& str, Cas...
function Matches (line 9523) | StdString::RegexMatcher Matches(std::string const& regex, CaseSensit...
class MatchExpr (line 3372) | class MatchExpr : public ITransientExpression {
method MatchExpr (line 3377) | MatchExpr( ArgT const& arg, MatcherT const& matcher, StringRef const...
method streamReconstructedExpression (line 3384) | void streamReconstructedExpression( std::ostream &os ) const override {
function makeMatchExpr (line 3399) | auto makeMatchExpr( ArgT const& arg, MatcherT const& matcher, StringRe...
type Generators (line 3446) | namespace Generators {
class GeneratorUntypedBase (line 3447) | class GeneratorUntypedBase {
method GeneratorUntypedBase (line 3449) | GeneratorUntypedBase() = default;
type pf (line 3523) | namespace pf{
function make_unique (line 3525) | std::unique_ptr<T> make_unique( Args&&... args ) {
type IGenerator (line 3531) | struct IGenerator : GeneratorUntypedBase {
class SingleValueGenerator (line 3543) | class SingleValueGenerator final : public IGenerator<T> {
method SingleValueGenerator (line 3546) | SingleValueGenerator(T const& value) : m_value( value ) {}
method SingleValueGenerator (line 3547) | SingleValueGenerator(T&& value) : m_value(std::move(value)) {}
method T (line 3549) | T const& get() const override {
method next (line 3552) | bool next() override {
class FixedValuesGenerator (line 3558) | class FixedValuesGenerator final : public IGenerator<T> {
method FixedValuesGenerator (line 3562) | FixedValuesGenerator( std::initializer_list<T> values ) : m_values...
method T (line 3564) | T const& get() const override {
method next (line 3567) | bool next() override {
class GeneratorWrapper (line 3574) | class GeneratorWrapper final {
method GeneratorWrapper (line 3577) | GeneratorWrapper(std::unique_ptr<IGenerator<T>> generator):
method T (line 3580) | T const& get() const {
method next (line 3583) | bool next() {
function value (line 3589) | GeneratorWrapper<T> value(T&& value) {
function values (line 3593) | GeneratorWrapper<T> values(std::initializer_list<T> values) {
class Generators (line 3598) | class Generators : public IGenerator<T> {
method populate (line 3602) | void populate(GeneratorWrapper<T>&& generator) {
method populate (line 3605) | void populate(T&& val) {
method populate (line 3609) | void populate(U&& val) {
method populate (line 3613) | void populate(U&& valueOrGenerator, Gs... moreGenerators) {
method Generators (line 3620) | Generators(Gs... moreGenerators) {
method T (line 3625) | T const& get() const override {
method next (line 3629) | bool next() override {
function table (line 3642) | GeneratorWrapper<std::tuple<Ts...>> table( std::initializer_list<std...
type as (line 3648) | struct as {}
function makeGenerators (line 3651) | auto makeGenerators( GeneratorWrapper<T>&& generator, Gs... moreGene...
function makeGenerators (line 3655) | auto makeGenerators( GeneratorWrapper<T>&& generator ) -> Generators...
function makeGenerators (line 3659) | auto makeGenerators( T&& val, Gs... moreGenerators ) -> Generators<T> {
function makeGenerators (line 3663) | auto makeGenerators( as<T>, U&& val, Gs... moreGenerators ) -> Gener...
function generate (line 3673) | auto generate( SourceLineInfo const& lineInfo, L const& generatorExp...
class TakeGenerator (line 3698) | class TakeGenerator : public IGenerator<T> {
method TakeGenerator (line 3703) | TakeGenerator(size_t target, GeneratorWrapper<T>&& generator):
method T (line 3709) | T const& get() const override {
method next (line 3712) | bool next() override {
function take (line 3729) | GeneratorWrapper<T> take(size_t target, GeneratorWrapper<T>&& genera...
class FilterGenerator (line 3734) | class FilterGenerator : public IGenerator<T> {
method FilterGenerator (line 3739) | FilterGenerator(P&& pred, GeneratorWrapper<T>&& generator):
method T (line 3753) | T const& get() const override {
method next (line 3757) | bool next() override {
function filter (line 3768) | GeneratorWrapper<T> filter(Predicate&& pred, GeneratorWrapper<T>&& g...
class RepeatGenerator (line 3773) | class RepeatGenerator : public IGenerator<T> {
method RepeatGenerator (line 3780) | RepeatGenerator(size_t repeats, GeneratorWrapper<T>&& generator):
method T (line 3787) | T const& get() const override {
method next (line 3795) | bool next() override {
function repeat (line 3821) | GeneratorWrapper<T> repeat(size_t repeats, GeneratorWrapper<T>&& gen...
class MapGenerator (line 3826) | class MapGenerator : public IGenerator<T> {
method MapGenerator (line 3834) | MapGenerator(F2&& function, GeneratorWrapper<U>&& generator) :
method T (line 3840) | T const& get() const override {
method next (line 3843) | bool next() override {
function map (line 3853) | GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& gener...
function map (line 3859) | GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<T>&& gener...
class ChunkGenerator (line 3866) | class ChunkGenerator final : public IGenerator<std::vector<T>> {
method ChunkGenerator (line 3872) | ChunkGenerator(size_t size, GeneratorWrapper<T> generator) :
method next (line 3887) | bool next() override {
function chunk (line 3900) | GeneratorWrapper<std::vector<T>> chunk(size_t size, GeneratorWrapper...
class RandomFloatingGenerator (line 4043) | class RandomFloatingGenerator final : public IGenerator<Float> {
method RandomFloatingGenerator (line 4050) | RandomFloatingGenerator(Float a, Float b):
method Float (line 4056) | Float const& get() const override {
method next (line 4059) | bool next() override {
class RandomIntegerGenerator (line 4066) | class RandomIntegerGenerator final : public IGenerator<Integer> {
method RandomIntegerGenerator (line 4072) | RandomIntegerGenerator(Integer a, Integer b):
method Integer (line 4078) | Integer const& get() const override {
method next (line 4081) | bool next() override {
function random (line 4090) | typename std::enable_if<std::is_integral<T>::value && !std::is_same<...
function random (line 4099) | typename std::enable_if<std::is_floating_point<T>::value,
class RangeGenerator (line 4108) | class RangeGenerator final : public IGenerator<T> {
method RangeGenerator (line 4115) | RangeGenerator(T const& start, T const& end, T const& step):
method RangeGenerator (line 4126) | RangeGenerator(T const& start, T const& end):
method T (line 4130) | T const& get() const override {
method next (line 4134) | bool next() override {
function range (line 4141) | GeneratorWrapper<T> range(T const& start, T const& end, T const& ste...
function range (line 4147) | GeneratorWrapper<T> range(T const& start, T const& end) {
function acquireGeneratorTracker (line 8830) | auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IG...
type GeneratorTracker (line 10246) | struct GeneratorTracker : TestCaseTracking::TrackerBase, IGeneratorT...
method GeneratorTracker (line 10249) | GeneratorTracker( TestCaseTracking::NameAndLocation const& nameAnd...
method GeneratorTracker (line 10254) | static GeneratorTracker& acquire( TrackerContext& ctx, TestCaseTra...
method isGeneratorTracker (line 10276) | bool isGeneratorTracker() const override { return true; }
method hasGenerator (line 10277) | auto hasGenerator() const -> bool override {
method close (line 10280) | void close() override {
method getGenerator (line 10290) | auto getGenerator() const -> GeneratorBasePtr const& override {
method setGenerator (line 10293) | void setGenerator( GeneratorBasePtr&& generator ) override {
type IGeneratorTracker (line 3461) | struct IGeneratorTracker {
function throw_exception (line 3478) | [[noreturn]]
class GeneratorException (line 3509) | class GeneratorException : public std::exception {
method GeneratorException (line 3513) | GeneratorException(const char* msg):
type Generators (line 3520) | namespace Generators {
class GeneratorUntypedBase (line 3447) | class GeneratorUntypedBase {
method GeneratorUntypedBase (line 3449) | GeneratorUntypedBase() = default;
type pf (line 3523) | namespace pf{
function make_unique (line 3525) | std::unique_ptr<T> make_unique( Args&&... args ) {
type IGenerator (line 3531) | struct IGenerator : GeneratorUntypedBase {
class SingleValueGenerator (line 3543) | class SingleValueGenerator final : public IGenerator<T> {
method SingleValueGenerator (line 3546) | SingleValueGenerator(T const& value) : m_value( value ) {}
method SingleValueGenerator (line 3547) | SingleValueGenerator(T&& value) : m_value(std::move(value)) {}
method T (line 3549) | T const& get() const override {
method next (line 3552) | bool next() override {
class FixedValuesGenerator (line 3558) | class FixedValuesGenerator final : public IGenerator<T> {
method FixedValuesGenerator (line 3562) | FixedValuesGenerator( std::initializer_list<T> values ) : m_values...
method T (line 3564) | T const& get() const override {
method next (line 3567) | bool next() override {
class GeneratorWrapper (line 3574) | class GeneratorWrapper final {
method GeneratorWrapper (line 3577) | GeneratorWrapper(std::unique_ptr<IGenerator<T>> generator):
method T (line 3580) | T const& get() const {
method next (line 3583) | bool next() {
function value (line 3589) | GeneratorWrapper<T> value(T&& value) {
function values (line 3593) | GeneratorWrapper<T> values(std::initializer_list<T> values) {
class Generators (line 3598) | class Generators : public IGenerator<T> {
method populate (line 3602) | void populate(GeneratorWrapper<T>&& generator) {
method populate (line 3605) | void populate(T&& val) {
method populate (line 3609) | void populate(U&& val) {
method populate (line 3613) | void populate(U&& valueOrGenerator, Gs... moreGenerators) {
method Generators (line 3620) | Generators(Gs... moreGenerators) {
method T (line 3625) | T const& get() const override {
method next (line 3629) | bool next() override {
function table (line 3642) | GeneratorWrapper<std::tuple<Ts...>> table( std::initializer_list<std...
type as (line 3648) | struct as {}
function makeGenerators (line 3651) | auto makeGenerators( GeneratorWrapper<T>&& generator, Gs... moreGene...
function makeGenerators (line 3655) | auto makeGenerators( GeneratorWrapper<T>&& generator ) -> Generators...
function makeGenerators (line 3659) | auto makeGenerators( T&& val, Gs... moreGenerators ) -> Generators<T> {
function makeGenerators (line 3663) | auto makeGenerators( as<T>, U&& val, Gs... moreGenerators ) -> Gener...
function generate (line 3673) | auto generate( SourceLineInfo const& lineInfo, L const& generatorExp...
class TakeGenerator (line 3698) | class TakeGenerator : public IGenerator<T> {
method TakeGenerator (line 3703) | TakeGenerator(size_t target, GeneratorWrapper<T>&& generator):
method T (line 3709) | T const& get() const override {
method next (line 3712) | bool next() override {
function take (line 3729) | GeneratorWrapper<T> take(size_t target, GeneratorWrapper<T>&& genera...
class FilterGenerator (line 3734) | class FilterGenerator : public IGenerator<T> {
method FilterGenerator (line 3739) | FilterGenerator(P&& pred, GeneratorWrapper<T>&& generator):
method T (line 3753) | T const& get() const override {
method next (line 3757) | bool next() override {
function filter (line 3768) | GeneratorWrapper<T> filter(Predicate&& pred, GeneratorWrapper<T>&& g...
class RepeatGenerator (line 3773) | class RepeatGenerator : public IGenerator<T> {
method RepeatGenerator (line 3780) | RepeatGenerator(size_t repeats, GeneratorWrapper<T>&& generator):
method T (line 3787) | T const& get() const override {
method next (line 3795) | bool next() override {
function repeat (line 3821) | GeneratorWrapper<T> repeat(size_t repeats, GeneratorWrapper<T>&& gen...
class MapGenerator (line 3826) | class MapGenerator : public IGenerator<T> {
method MapGenerator (line 3834) | MapGenerator(F2&& function, GeneratorWrapper<U>&& generator) :
method T (line 3840) | T const& get() const override {
method next (line 3843) | bool next() override {
function map (line 3853) | GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& gener...
function map (line 3859) | GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<T>&& gener...
class ChunkGenerator (line 3866) | class ChunkGenerator final : public IGenerator<std::vector<T>> {
method ChunkGenerator (line 3872) | ChunkGenerator(size_t size, GeneratorWrapper<T> generator) :
method next (line 3887) | bool next() override {
function chunk (line 3900) | GeneratorWrapper<std::vector<T>> chunk(size_t size, GeneratorWrapper...
class RandomFloatingGenerator (line 4043) | class RandomFloatingGenerator final : public IGenerator<Float> {
method RandomFloatingGenerator (line 4050) | RandomFloatingGenerator(Float a, Float b):
method Float (line 4056) | Float const& get() const override {
method next (line 4059) | bool next() override {
class RandomIntegerGenerator (line 4066) | class RandomIntegerGenerator final : public IGenerator<Integer> {
method RandomIntegerGenerator (line 4072) | RandomIntegerGenerator(Integer a, Integer b):
method Integer (line 4078) | Integer const& get() const override {
method next (line 4081) | bool next() override {
function random (line 4090) | typename std::enable_if<std::is_integral<T>::value && !std::is_same<...
function random (line 4099) | typename std::enable_if<std::is_floating_point<T>::value,
class RangeGenerator (line 4108) | class RangeGenerator final : public IGenerator<T> {
method RangeGenerator (line 4115) | RangeGenerator(T const& start, T const& end, T const& step):
method RangeGenerator (line 4126) | RangeGenerator(T const& start, T const& end):
method T (line 4130) | T const& get() const override {
method next (line 4134) | bool next() override {
function range (line 4141) | GeneratorWrapper<T> range(T const& start, T const& end, T const& ste...
function range (line 4147) | GeneratorWrapper<T> range(T const& start, T const& end) {
function acquireGeneratorTracker (line 8830) | auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IG...
type GeneratorTracker (line 10246) | struct GeneratorTracker : TestCaseTracking::TrackerBase, IGeneratorT...
method GeneratorTracker (line 10249) | GeneratorTracker( TestCaseTracking::NameAndLocation const& nameAnd...
method GeneratorTracker (line 10254) | static GeneratorTracker& acquire( TrackerContext& ctx, TestCaseTra...
method isGeneratorTracker (line 10276) | bool isGeneratorTracker() const override { return true; }
method hasGenerator (line 10277) | auto hasGenerator() const -> bool override {
method close (line 10280) | void close() override {
method getGenerator (line 10290) | auto getGenerator() const -> GeneratorBasePtr const& override {
method setGenerator (line 10293) | void setGenerator( GeneratorBasePtr&& generator ) override {
type Generators (line 3695) | namespace Generators {
class GeneratorUntypedBase (line 3447) | class GeneratorUntypedBase {
method GeneratorUntypedBase (line 3449) | GeneratorUntypedBase() = default;
type pf (line 3523) | namespace pf{
function make_unique (line 3525) | std::unique_ptr<T> make_unique( Args&&... args ) {
type IGenerator (line 3531) | struct IGenerator : GeneratorUntypedBase {
class SingleValueGenerator (line 3543) | class SingleValueGenerator final : public IGenerator<T> {
method SingleValueGenerator (line 3546) | SingleValueGenerator(T const& value) : m_value( value ) {}
method SingleValueGenerator (line 3547) | SingleValueGenerator(T&& value) : m_value(std::move(value)) {}
method T (line 3549) | T const& get() const override {
method next (line 3552) | bool next() override {
class FixedValuesGenerator (line 3558) | class FixedValuesGenerator final : public IGenerator<T> {
method FixedValuesGenerator (line 3562) | FixedValuesGenerator( std::initializer_list<T> values ) : m_values...
method T (line 3564) | T const& get() const override {
method next (line 3567) | bool next() override {
class GeneratorWrapper (line 3574) | class GeneratorWrapper final {
method GeneratorWrapper (line 3577) | GeneratorWrapper(std::unique_ptr<IGenerator<T>> generator):
method T (line 3580) | T const& get() const {
method next (line 3583) | bool next() {
function value (line 3589) | GeneratorWrapper<T> value(T&& value) {
function values (line 3593) | GeneratorWrapper<T> values(std::initializer_list<T> values) {
class Generators (line 3598) | class Generators : public IGenerator<T> {
method populate (line 3602) | void populate(GeneratorWrapper<T>&& generator) {
method populate (line 3605) | void populate(T&& val) {
method populate (line 3609) | void populate(U&& val) {
method populate (line 3613) | void populate(U&& valueOrGenerator, Gs... moreGenerators) {
method Generators (line 3620) | Generators(Gs... moreGenerators) {
method T (line 3625) | T const& get() const override {
method next (line 3629) | bool next() override {
function table (line 3642) | GeneratorWrapper<std::tuple<Ts...>> table( std::initializer_list<std...
type as (line 3648) | struct as {}
function makeGenerators (line 3651) | auto makeGenerators( GeneratorWrapper<T>&& generator, Gs... moreGene...
function makeGenerators (line 3655) | auto makeGenerators( GeneratorWrapper<T>&& generator ) -> Generators...
function makeGenerators (line 3659) | auto makeGenerators( T&& val, Gs... moreGenerators ) -> Generators<T> {
function makeGenerators (line 3663) | auto makeGenerators( as<T>, U&& val, Gs... moreGenerators ) -> Gener...
function generate (line 3673) | auto generate( SourceLineInfo const& lineInfo, L const& generatorExp...
class TakeGenerator (line 3698) | class TakeGenerator : public IGenerator<T> {
method TakeGenerator (line 3703) | TakeGenerator(size_t target, GeneratorWrapper<T>&& generator):
method T (line 3709) | T const& get() const override {
method next (line 3712) | bool next() override {
function take (line 3729) | GeneratorWrapper<T> take(size_t target, GeneratorWrapper<T>&& genera...
class FilterGenerator (line 3734) | class FilterGenerator : public IGenerator<T> {
method FilterGenerator (line 3739) | FilterGenerator(P&& pred, GeneratorWrapper<T>&& generator):
method T (line 3753) | T const& get() const override {
method next (line 3757) | bool next() override {
function filter (line 3768) | GeneratorWrapper<T> filter(Predicate&& pred, GeneratorWrapper<T>&& g...
class RepeatGenerator (line 3773) | class RepeatGenerator : public IGenerator<T> {
method RepeatGenerator (line 3780) | RepeatGenerator(size_t repeats, GeneratorWrapper<T>&& generator):
method T (line 3787) | T const& get() const override {
method next (line 3795) | bool next() override {
function repeat (line 3821) | GeneratorWrapper<T> repeat(size_t repeats, GeneratorWrapper<T>&& gen...
class MapGenerator (line 3826) | class MapGenerator : public IGenerator<T> {
method MapGenerator (line 3834) | MapGenerator(F2&& function, GeneratorWrapper<U>&& generator) :
method T (line 3840) | T const& get() const override {
method next (line 3843) | bool next() override {
function map (line 3853) | GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& gener...
function map (line 3859) | GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<T>&& gener...
class ChunkGenerator (line 3866) | class ChunkGenerator final : public IGenerator<std::vector<T>> {
method ChunkGenerator (line 3872) | ChunkGenerator(size_t size, GeneratorWrapper<T> generator) :
method next (line 3887) | bool next() override {
function chunk (line 3900) | GeneratorWrapper<std::vector<T>> chunk(size_t size, GeneratorWrapper...
class RandomFloatingGenerator (line 4043) | class RandomFloatingGenerator final : public IGenerator<Float> {
method RandomFloatingGenerator (line 4050) | RandomFloatingGenerator(Float a, Float b):
method Float (line 4056) | Float const& get() const override {
method next (line 4059) | bool next() override {
class RandomIntegerGenerator (line 4066) | class RandomIntegerGenerator final : public IGenerator<Integer> {
method RandomIntegerGenerator (line 4072) | RandomIntegerGenerator(Integer a, Integer b):
method Integer (line 4078) | Integer const& get() const override {
method next (line 4081) | bool next() override {
function random (line 4090) | typename std::enable_if<std::is_integral<T>::value && !std::is_same<...
function random (line 4099) | typename std::enable_if<std::is_floating_point<T>::value,
class RangeGenerator (line 4108) | class RangeGenerator final : public IGenerator<T> {
method RangeGenerator (line 4115) | RangeGenerator(T const& start, T const& end, T const& step):
method RangeGenerator (line 4126) | RangeGenerator(T const& start, T const& end):
method T (line 4130) | T const& get() const override {
method next (line 4134) | bool next() override {
function range (line 4141) | GeneratorWrapper<T> range(T const& start, T const& end, T const& ste...
function range (line 4147) | GeneratorWrapper<T> range(T const& start, T const& end) {
function acquireGeneratorTracker (line 8830) | auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IG...
type GeneratorTracker (line 10246) | struct GeneratorTracker : TestCaseTracking::TrackerBase, IGeneratorT...
method GeneratorTracker (line 10249) | GeneratorTracker( TestCaseTracking::NameAndLocation const& nameAnd...
method GeneratorTracker (line 10254) | static GeneratorTracker& acquire( TrackerContext& ctx, TestCaseTra...
method isGeneratorTracker (line 10276) | bool isGeneratorTracker() const override { return true; }
method hasGenerator (line 10277) | auto hasGenerator() const -> bool override {
method close (line 10280) | void close() override {
method getGenerator (line 10290) | auto getGenerator() const -> GeneratorBasePtr const& override {
method setGenerator (line 10293) | void setGenerator( GeneratorBasePtr&& generator ) override {
type IResultCapture (line 3918) | struct IResultCapture
type IRunner (line 3919) | struct IRunner
type IConfig (line 3920) | struct IConfig
type IMutableContext (line 3921) | struct IMutableContext
type IContext (line 3925) | struct IContext
type IMutableContext (line 3934) | struct IMutableContext : IContext
function IMutableContext (line 3948) | inline IMutableContext& getCurrentMutableContext()
function IContext (line 3955) | inline IContext& getCurrentContext()
type Verbosity (line 3973) | enum class Verbosity {
type WarnAbout (line 3979) | struct WarnAbout { enum What {
type What (line 3979) | enum What {
type ShowDurations (line 3985) | struct ShowDurations { enum OrNot {
type OrNot (line 3985) | enum OrNot {
type RunTests (line 3990) | struct RunTests { enum InWhatOrder {
type InWhatOrder (line 3990) | enum InWhatOrder {
type UseColour (line 3995) | struct UseColour { enum YesOrNo {
type YesOrNo (line 3995) | enum YesOrNo {
type WaitForKeypress (line 4000) | struct WaitForKeypress { enum When {
type When (line 4000) | enum When {
class TestSpec (line 4007) | class TestSpec
type Pattern (line 4511) | struct Pattern {
class NamePattern (line 4517) | class NamePattern : public Pattern {
class TagPattern (line 4526) | class TagPattern : public Pattern {
class ExcludedPattern (line 4535) | class ExcludedPattern : public Pattern {
type Filter (line 4544) | struct Filter {
type IConfig (line 4009) | struct IConfig : NonCopyable {
type Generators (line 4040) | namespace Generators {
class GeneratorUntypedBase (line 3447) | class GeneratorUntypedBase {
method GeneratorUntypedBase (line 3449) | GeneratorUntypedBase() = default;
type pf (line 3523) | namespace pf{
function make_unique (line 3525) | std::unique_ptr<T> make_unique( Args&&... args ) {
type IGenerator (line 3531) | struct IGenerator : GeneratorUntypedBase {
class SingleValueGenerator (line 3543) | class SingleValueGenerator final : public IGenerator<T> {
method SingleValueGenerator (line 3546) | SingleValueGenerator(T const& value) : m_value( value ) {}
method SingleValueGenerator (line 3547) | SingleValueGenerator(T&& value) : m_value(std::move(value)) {}
method T (line 3549) | T const& get() const override {
method next (line 3552) | bool next() override {
class FixedValuesGenerator (line 3558) | class FixedValuesGenerator final : public IGenerator<T> {
method FixedValuesGenerator (line 3562) | FixedValuesGenerator( std::initializer_list<T> values ) : m_values...
method T (line 3564) | T const& get() const override {
method next (line 3567) | bool next() override {
class GeneratorWrapper (line 3574) | class GeneratorWrapper final {
method GeneratorWrapper (line 3577) | GeneratorWrapper(std::unique_ptr<IGenerator<T>> generator):
method T (line 3580) | T const& get() const {
method next (line 3583) | bool next() {
function value (line 3589) | GeneratorWrapper<T> value(T&& value) {
function values (line 3593) | GeneratorWrapper<T> values(std::initializer_list<T> values) {
class Generators (line 3598) | class Generators : public IGenerator<T> {
method populate (line 3602) | void populate(GeneratorWrapper<T>&& generator) {
method populate (line 3605) | void populate(T&& val) {
method populate (line 3609) | void populate(U&& val) {
method populate (line 3613) | void populate(U&& valueOrGenerator, Gs... moreGenerators) {
method Generators (line 3620) | Generators(Gs... moreGenerators) {
method T (line 3625) | T const& get() const override {
method next (line 3629) | bool next() override {
function table (line 3642) | GeneratorWrapper<std::tuple<Ts...>> table( std::initializer_list<std...
type as (line 3648) | struct as {}
function makeGenerators (line 3651) | auto makeGenerators( GeneratorWrapper<T>&& generator, Gs... moreGene...
function makeGenerators (line 3655) | auto makeGenerators( GeneratorWrapper<T>&& generator ) -> Generators...
function makeGenerators (line 3659) | auto makeGenerators( T&& val, Gs... moreGenerators ) -> Generators<T> {
function makeGenerators (line 3663) | auto makeGenerators( as<T>, U&& val, Gs... moreGenerators ) -> Gener...
function generate (line 3673) | auto generate( SourceLineInfo const& lineInfo, L const& generatorExp...
class TakeGenerator (line 3698) | class TakeGenerator : public IGenerator<T> {
method TakeGenerator (line 3703) | TakeGenerator(size_t target, GeneratorWrapper<T>&& generator):
method T (line 3709) | T const& get() const override {
method next (line 3712) | bool next() override {
function take (line 3729) | GeneratorWrapper<T> take(size_t target, GeneratorWrapper<T>&& genera...
class FilterGenerator (line 3734) | class FilterGenerator : public IGenerator<T> {
method FilterGenerator (line 3739) | FilterGenerator(P&& pred, GeneratorWrapper<T>&& generator):
method T (line 3753) | T const& get() const override {
method next (line 3757) | bool next() override {
function filter (line 3768) | GeneratorWrapper<T> filter(Predicate&& pred, GeneratorWrapper<T>&& g...
class RepeatGenerator (line 3773) | class RepeatGenerator : public IGenerator<T> {
method RepeatGenerator (line 3780) | RepeatGenerator(size_t repeats, GeneratorWrapper<T>&& generator):
method T (line 3787) | T const& get() const override {
method next (line 3795) | bool next() override {
function repeat (line 3821) | GeneratorWrapper<T> repeat(size_t repeats, GeneratorWrapper<T>&& gen...
class MapGenerator (line 3826) | class MapGenerator : public IGenerator<T> {
method MapGenerator (line 3834) | MapGenerator(F2&& function, GeneratorWrapper<U>&& generator) :
method T (line 3840) | T const& get() const override {
method next (line 3843) | bool next() override {
function map (line 3853) | GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<U>&& gener...
function map (line 3859) | GeneratorWrapper<T> map(Func&& function, GeneratorWrapper<T>&& gener...
class ChunkGenerator (line 3866) | class ChunkGenerator final : public IGenerator<std::vector<T>> {
method ChunkGenerator (line 3872) | ChunkGenerator(size_t size, GeneratorWrapper<T> generator) :
method next (line 3887) | bool next() override {
function chunk (line 3900) | GeneratorWrapper<std::vector<T>> chunk(size_t size, GeneratorWrapper...
class RandomFloatingGenerator (line 4043) | class RandomFloatingGenerator final : public IGenerator<Float> {
method RandomFloatingGenerator (line 4050) | RandomFloatingGenerator(Float a, Float b):
method Float (line 4056) | Float const& get() const override {
method next (line 4059) | bool next() override {
class RandomIntegerGenerator (line 4066) | class RandomIntegerGenerator final : public IGenerator<Integer> {
method RandomIntegerGenerator (line 4072) | RandomIntegerGenerator(Integer a, Integer b):
method Integer (line 4078) | Integer const& get() const override {
method next (line 4081) | bool next() override {
function random (line 4090) | typename std::enable_if<std::is_integral<T>::value && !std::is_same<...
function random (line 4099) | typename std::enable_if<std::is_floating_point<T>::value,
class RangeGenerator (line 4108) | class RangeGenerator final : public IGenerator<T> {
method RangeGenerator (line 4115) | RangeGenerator(T const& start, T const& end, T const& step):
method RangeGenerator (line 4126) | RangeGenerator(T const& start, T const& end):
method T (line 4130) | T const& get() const override {
method next (line 4134) | bool next() override {
function range (line 4141) | GeneratorWrapper<T> range(T const& start, T const& end, T const& ste...
function range (line 4147) | GeneratorWrapper<T> range(T const& start, T const& end) {
function acquireGeneratorTracker (line 8830) | auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IG...
type GeneratorTracker (line 10246) | struct GeneratorTracker : TestCaseTracking::TrackerBase, IGeneratorT...
method GeneratorTracker (line 10249) | GeneratorTracker( TestCaseTracking::NameAndLocation const& nameAnd...
method GeneratorTracker (line 10254) | static GeneratorTracker& acquire( TrackerContext& ctx, TestCaseTra...
method isGeneratorTracker (line 10276) | bool isGeneratorTracker() const override { return true; }
method hasGenerator (line 10277) | auto hasGenerator() const -> bool override {
method close (line 10280) | void close() override {
method getGenerator (line 10290) | auto getGenerator() const -> GeneratorBasePtr const& override {
method setGenerator (line 10293) | void setGenerator( GeneratorBasePtr&& generator ) override {
type ITestInvoker (line 4172) | struct ITestInvoker
type TestCaseInfo (line 4174) | struct TestCaseInfo {
type SpecialProperties (line 4175) | enum SpecialProperties{
class TestCase (line 4209) | class TestCase : public TestCaseInfo {
type IRunner (line 4242) | struct IRunner {
class WildcardPattern (line 4481) | class WildcardPattern {
type WildcardPosition (line 4482) | enum WildcardPosition {
class TestSpec (line 4510) | class TestSpec {
type Pattern (line 4511) | struct Pattern {
class NamePattern (line 4517) | class NamePattern : public Pattern {
class TagPattern (line 4526) | class TagPattern : public Pattern {
class ExcludedPattern (line 4535) | class ExcludedPattern : public Pattern {
type Filter (line 4544) | struct Filter {
type TagAlias (line 4572) | struct TagAlias
type ITagAliasRegistry (line 4574) | struct ITagAliasRegistry {
class TestSpecParser (line 4588) | class TestSpecParser {
type Mode (line 4589) | enum Mode{ None, Name, QuotedName, Tag, EscapedName }
method addPattern (line 4612) | void addPattern() {
type IStream (line 4654) | struct IStream
type ConfigData (line 4656) | struct ConfigData {
class Config (line 4694) | class Config : public IConfig {
method Config (line 4697) | Config() = default;
type AssertionResultData (line 4755) | struct AssertionResultData
method AssertionResultData (line 4757) | AssertionResultData() = delete;
class AssertionResult (line 4769) | class AssertionResult {
method AssertionResult (line 4771) | AssertionResult() = delete;
class Option (line 4801) | class Option {
method Option (line 4803) | Option() : nullableValue( nullptr ) {}
method Option (line 4804) | Option( T const& _value )
method Option (line 4807) | Option( Option const& _other )
method Option (line 4815) | Option& operator= ( Option const& _other ) {
method Option (line 4823) | Option& operator = ( T const& _value ) {
method reset (line 4829) | void reset() {
method T (line 4835) | T& operator*() { return *nullableValue; }
method T (line 4836) | T const& operator*() const { return *nullableValue; }
method T (line 4837) | T* operator->() { return nullableValue; }
method T (line 4838) | const T* operator->() const { return nullableValue; }
method T (line 4840) | T valueOr( T const& defaultValue ) const {
method some (line 4844) | bool some() const { return nullableValue != nullptr; }
method none (line 4845) | bool none() const { return nullableValue == nullptr; }
type ReporterConfig (line 4868) | struct ReporterConfig {
type ReporterPreferences (line 4881) | struct ReporterPreferences {
type LazyStat (line 4887) | struct LazyStat : Option<T> {
method LazyStat (line 4888) | LazyStat& operator=( T const& _value ) {
method reset (line 4893) | void reset() {
type TestRunInfo (line 4900) | struct TestRunInfo {
type GroupInfo (line 4904) | struct GroupInfo {
type AssertionStats (line 4914) | struct AssertionStats {
method AssertionStats (line 4919) | AssertionStats( AssertionStats const& ) = default;
method AssertionStats (line 4920) | AssertionStats( AssertionStats && ) = default;
method AssertionStats (line 4921) | AssertionStats& operator = ( AssertionStats const& ) = delete;
method AssertionStats (line 4922) | AssertionStats& operator = ( AssertionStats && ) = delete;
type SectionStats (line 4930) | struct SectionStats {
method SectionStats (line 4935) | SectionStats( SectionStats const& ) = default;
method SectionStats (line 4936) | SectionStats( SectionStats && ) = default;
method SectionStats (line 4937) | SectionStats& operator = ( SectionStats const& ) = default;
method SectionStats (line 4938) | SectionStats& operator = ( SectionStats && ) = default;
type TestCaseStats (line 4947) | struct TestCaseStats {
method TestCaseStats (line 4954) | TestCaseStats( TestCaseStats const& ) = default;
method TestCaseStats (line 4955) | TestCaseStats( TestCaseStats && ) = default;
method TestCaseStats (line 4956) | TestCaseStats& operator = ( TestCaseStats const& ) = default;
method TestCaseStats (line 4957) | TestCaseStats& operator = ( TestCaseStats && ) = default;
type TestGroupStats (line 4967) | struct TestGroupStats {
method TestGroupStats (line 4973) | TestGroupStats( TestGroupStats const& ) = default;
method TestGroupStats (line 4974) | TestGroupStats( TestGroupStats && ) = default;
method TestGroupStats (line 4975) | TestGroupStats& operator = ( TestGroupStats const& ) = default;
method TestGroupStats (line 4976) | TestGroupStats& operator = ( TestGroupStats && ) = default;
type TestRunStats (line 4984) | struct TestRunStats {
method TestRunStats (line 4989) | TestRunStats( TestRunStats const& ) = default;
method TestRunStats (line 4990) | TestRunStats( TestRunStats && ) = default;
method TestRunStats (line 4991) | TestRunStats& operator = ( TestRunStats const& ) = default;
method TestRunStats (line 4992) | TestRunStats& operator = ( TestRunStats && ) = default;
type BenchmarkInfo (line 5000) | struct BenchmarkInfo {
type BenchmarkStats (line 5003) | struct BenchmarkStats {
type IStreamingReporter (line 5009) | struct IStreamingReporter {
method benchmarkStarting (line 5027) | virtual void benchmarkStarting( BenchmarkInfo const& ) {}
method benchmarkEnded (line 5035) | virtual void benchmarkEnded( BenchmarkStats const& ) {}
type IReporterFactory (line 5051) | struct IReporterFactory {
type IReporterRegistry (line 5058) | struct IReporterRegistry {
type StreamingReporterBase (line 5086) | struct StreamingReporterBase : IStreamingReporter {
method StreamingReporterBase (line 5088) | StreamingReporterBase( ReporterConfig const& _config )
method ReporterPreferences (line 5097) | ReporterPreferences getPreferences() const override {
method getSupportedVerbosities (line 5101) | static std::set<Verbosity> getSupportedVerbosities() {
method noMatchingTestCases (line 5107) | void noMatchingTestCases(std::string const&) override {}
method testRunStarting (line 5109) | void testRunStarting(TestRunInfo const& _testRunInfo) override {
method testGroupStarting (line 5112) | void testGroupStarting(GroupInfo const& _groupInfo) override {
method testCaseStarting (line 5116) | void testCaseStarting(TestCaseInfo const& _testInfo) override {
method sectionStarting (line 5119) | void sectionStarting(SectionInfo const& _sectionInfo) override {
method sectionEnded (line 5123) | void sectionEnded(SectionStats const& /* _sectionStats */) override {
method testCaseEnded (line 5126) | void testCaseEnded(TestCaseStats const& /* _testCaseStats */) overri...
method testGroupEnded (line 5129) | void testGroupEnded(TestGroupStats const& /* _testGroupStats */) ove...
method testRunEnded (line 5132) | void testRunEnded(TestRunStats const& /* _testRunStats */) override {
method skipTest (line 5138) | void skipTest(TestCaseInfo const&) override {
type CumulativeReporterBase (line 5155) | struct CumulativeReporterBase : IStreamingReporter {
type Node (line 5157) | struct Node {
method Node (line 5158) | explicit Node( T const& _value ) : value( _value ) {}
type SectionNode (line 5165) | struct SectionNode {
method SectionNode (line 5166) | explicit SectionNode(SectionStats const& _stats) : stats(_stats) {}
type BySectionInfo (line 5185) | struct BySectionInfo {
method BySectionInfo (line 5186) | BySectionInfo( SectionInfo const& other ) : m_other( other ) {}
method BySectionInfo (line 5187) | BySectionInfo( BySectionInfo const& other ) : m_other( other.m_oth...
method CumulativeReporterBase (line 5202) | CumulativeReporterBase( ReporterConfig const& _config )
method ReporterPreferences (line 5212) | ReporterPreferences getPreferences() const override {
method getSupportedVerbosities (line 5216) | static std::set<Verbosity> getSupportedVerbosities() {
method testRunStarting (line 5220) | void testRunStarting( TestRunInfo const& ) override {}
method testGroupStarting (line 5221) | void testGroupStarting( GroupInfo const& ) override {}
method testCaseStarting (line 5223) | void testCaseStarting( TestCaseInfo const& ) override {}
method sectionStarting (line 5225) | void sectionStarting( SectionInfo const& sectionInfo ) override {
method assertionStarting (line 5250) | void assertionStarting(AssertionInfo const&) override {}
method assertionEnded (line 5252) | bool assertionEnded(AssertionStats const& assertionStats) override {
method sectionEnded (line 5264) | void sectionEnded(SectionStats const& sectionStats) override {
method testCaseEnded (line 5270) | void testCaseEnded(TestCaseStats const& testCaseStats) override {
method testGroupEnded (line 5281) | void testGroupEnded(TestGroupStats const& testGroupStats) override {
method testRunEnded (line 5286) | void testRunEnded(TestRunStats const& testRunStats) override {
method skipTest (line 5294) | void skipTest(TestCaseInfo const&) override {}
type TestEventListenerBase (line 5321) | struct TestEventListenerBase : StreamingReporterBase<TestEventListener...
type Colour (line 5337) | struct Colour {
type Code (line 5338) | enum Code {
class ReporterRegistrar (line 5398) | class ReporterRegistrar {
class ReporterFactory (line 5400) | class ReporterFactory : public IReporterFactory {
method IStreamingReporterPtr (line 5402) | virtual IStreamingReporterPtr create( ReporterConfig const& config...
method getDescription (line 5406) | virtual std::string getDescription() const override {
method ReporterRegistrar (line 5413) | explicit ReporterRegistrar( std::string const& name ) {
class ListenerRegistrar (line 5419) | class ListenerRegistrar {
class ListenerFactory (line 5421) | class ListenerFactory : public IReporterFactory {
method IStreamingReporterPtr (line 5423) | virtual IStreamingReporterPtr create( ReporterConfig const& config...
method getDescription (line 5426) | virtual std::string getDescription() const override {
method ListenerRegistrar (line 5433) | ListenerRegistrar() {
type CompactReporter (line 5463) | struct CompactReporter : StreamingReporterBase<CompactReporter> {
type SummaryColumn (line 5499) | struct SummaryColumn
method SummaryColumn (line 13835) | SummaryColumn( std::string _label, Colour::Code _colour )
method SummaryColumn (line 13838) | SummaryColumn addRow( std::size_t count ) {
class TablePrinter (line 5500) | class TablePrinter
method TablePrinter (line 13580) | TablePrinter( std::ostream& os, std::vector<ColumnInfo> columnInfos )
method columnInfos (line 13584) | auto columnInfos() const -> std::vector<ColumnInfo> const& {
method open (line 13588) | void open() {
method close (line 13598) | void close() {
method TablePrinter (line 13607) | TablePrinter& operator << (TablePrinter& tp, T const& value) {
method TablePrinter (line 13612) | TablePrinter& operator << (TablePrinter& tp, ColumnBreak) {
method TablePrinter (line 13635) | TablePrinter& operator << (TablePrinter& tp, RowBreak) {
type ConsoleReporter (line 5502) | struct ConsoleReporter : StreamingReporterBase<ConsoleReporter> {
class XmlEncode (line 5566) | class XmlEncode {
type ForWhat (line 5568) | enum ForWhat { ForTextNodes, ForAttributes }
class XmlWriter (line 5581) | class XmlWriter {
class ScopedElement (line 5584) | class ScopedElement {
method ScopedElement (line 5596) | ScopedElement& writeAttribute( std::string const& name, T const& a...
method XmlWriter (line 5608) | XmlWriter( XmlWriter const& ) = delete;
method XmlWriter (line 5609) | XmlWriter& operator=( XmlWriter const& ) = delete;
method XmlWriter (line 5622) | XmlWriter& writeAttribute( std::string const& name, T const& attribu...
class JunitReporter (line 5656) | class JunitReporter : public CumulativeReporterBase<JunitReporter> {
class XmlReporter (line 5704) | class XmlReporter : public StreamingReporterBase<XmlReporter> {
type TestCaseTracking (line 5771) | namespace TestCaseTracking {
type NameAndLocation (line 5773) | struct NameAndLocation {
type ITracker (line 5780) | struct ITracker
type ITracker (line 5784) | struct ITracker {
class TrackerContext (line 5812) | class TrackerContext {
type RunState (line 5814) | enum RunState {
class TrackerBase (line 5839) | class TrackerBase : public ITracker {
type CycleState (line 5841) | enum CycleState {
class SectionTracker (line 5887) | class SectionTracker : public TrackerBase {
function TrackerContext (line 11882) | TrackerContext& TrackerContext::instance() {
type RunState (line 5814) | enum RunState {
function ITracker (line 11887) | ITracker& TrackerContext::startRun() {
function ITracker (line 11911) | ITracker& TrackerContext::currentTracker() {
function NameAndLocation (line 11924) | NameAndLocation const& TrackerBase::nameAndLocation() const {
function ITrackerPtr (line 11944) | ITrackerPtr TrackerBase::findChild( NameAndLocation const& nameAndLo...
function ITracker (line 11955) | ITracker& TrackerBase::parent() {
function SectionTracker (line 12051) | SectionTracker& SectionTracker::acquire( TrackerContext& ctx, NameAn...
type LeakDetector (line 5918) | struct LeakDetector {
type Detail (line 5942) | namespace Detail {
function rawMemoryToString (line 1233) | std::string rawMemoryToString( const T& object ) {
class IsStreamInsertable (line 1238) | class IsStreamInsertable {
function convertUnstreamable (line 1254) | typename std::enable_if<
function convertUnstreamable (line 1260) | typename std::enable_if<
function convertUnstreamable (line 1267) | typename std::enable_if<
function stringify (line 1318) | std::string stringify(const T& e) {
function convertUnknownEnumToString (line 1323) | std::string convertUnknownEnumToString( E e ) {
function rangeToString (line 1494) | std::string rangeToString(InputIterator first, InputIterator last) {
function stringify (line 1524) | inline std::string stringify( NSString* nsstring ) {
type TupleElementPrinter (line 1592) | struct TupleElementPrinter {
method print (line 1593) | static void print(const Tuple& tuple, std::ostream& os) {
type TupleElementPrinter<Tuple, N, false> (line 1604) | struct TupleElementPrinter<Tuple, N, false> {
method print (line 1605) | static void print(const Tuple&, std::ostream&) {}
class Approx (line 2739) | class Approx {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
function Approx (line 5951) | Approx Approx::custom() {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
function Approx (line 5955) | Approx Approx::operator-() const {
method Approx (line 2757) | Approx operator()( T const& value ) {
method Approx (line 2766) | explicit Approx( T const& value ): Approx(static_cast<double>(value))
method Approx (line 2811) | Approx& epsilon( T const& newEpsilon ) {
method Approx (line 2818) | Approx& margin( T const& newMargin ) {
method Approx (line 2825) | Approx& scale( T const& newScale ) {
type Endianness (line 12350) | struct Endianness {
type Arch (line 12351) | enum Arch { Big, Little }
method Arch (line 12353) | static Arch which() {
function rawMemoryToString (line 12365) | std::string rawMemoryToString( const void *object, std::size_t size ) {
type literals (line 5989) | namespace literals {
type FatalConditionHandler (line 6079) | struct FatalConditionHandler {
type sigaction (line 6103) | struct sigaction
type FatalConditionHandler (line 6100) | struct FatalConditionHandler {
type sigaction (line 6103) | struct sigaction
type FatalConditionHandler (line 6119) | struct FatalConditionHandler {
type sigaction (line 6103) | struct sigaction
type IMutableContext (line 6131) | struct IMutableContext
class RunContext (line 6135) | class RunContext : public IResultCapture, public IRunner {
method RunContext (line 6138) | RunContext( RunContext const& ) = delete;
method RunContext (line 6139) | RunContext& operator =( RunContext const& ) = delete;
function handleExceptionMatchExpr (line 6352) | void handleExceptionMatchExpr( AssertionHandler& handler, std::string ...
function SourceLineInfo (line 6439) | SourceLineInfo AssertionResult::getSourceInfo() const {
method SourceLineInfo (line 419) | SourceLineInfo() = delete;
method SourceLineInfo (line 420) | SourceLineInfo( char const* _file, std::size_t _line ) noexcept
method SourceLineInfo (line 425) | SourceLineInfo( SourceLineInfo const& other ) = default;
method SourceLineInfo (line 426) | SourceLineInfo& operator = ( SourceLineInfo const& ) = default;
method SourceLineInfo (line 427) | SourceLineInfo( SourceLineInfo&& ) noexcept = default;
method SourceLineInfo (line 428) | SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default;
function StringRef (line 6443) | StringRef AssertionResult::getTestMacroName() const {
method StringRef (line 539) | StringRef() noexcept
method StringRef (line 543) | StringRef( StringRef const& other ) noexcept
method StringRef (line 548) | StringRef( StringRef&& other ) noexcept
method StringRef (line 558) | StringRef( char const* rawChars, size_type size ) noexcept
method StringRef (line 563) | StringRef( std::string const& stdString ) noexcept
method empty (line 591) | auto empty() const noexcept -> bool {
method size (line 594) | auto size() const noexcept -> size_type {
function handleExceptionMatchExpr (line 6484) | void handleExceptionMatchExpr( AssertionHandler& handler, StringMatche...
type clara (line 6562) | namespace clara {
type TextFlow (line 6563) | namespace TextFlow {
function isWhitespace (line 6565) | inline auto isWhitespace(char c) -> bool {
function isBreakableBefore (line 6569) | inline auto isBreakableBefore(char c) -> bool {
function isBreakableAfter (line 6573) | inline auto isBreakableAfter(char c) -> bool {
class Columns (line 6578) | class Columns
class iterator (line 6759) | class iterator {
type EndTag (line 6761) | struct EndTag {}
method iterator (line 6767) | iterator(Columns const& columns, EndTag)
method iterator (line 6783) | explicit iterator(Columns const& columns)
method begin (line 6831) | auto begin() const -> iterator { return iterator(*this); }
method end (line 6832) | auto end() const -> iterator { return { *this, iterator::EndTag(...
method friend (line 6844) | inline friend std::ostream& operator << (std::ostream& os, Colum...
method toString (line 6857) | auto toString() const -> std::string {
class Column (line 6580) | class Column {
class iterator (line 6587) | class iterator {
method iterator (line 6598) | iterator(Column const& column, size_t stringIndex)
method line (line 6602) | auto line() const -> std::string const& { return m_column.m_st...
method isBoundary (line 6604) | auto isBoundary(size_t at) const -> bool {
method calcLength (line 6614) | void calcLength() {
method indent (line 6641) | auto indent() const -> size_t {
method addIndentAndSuffix (line 6646) | auto addIndentAndSuffix(std::string const &plain) const -> std...
method iterator (line 6657) | explicit iterator(Column const& column) : m_column(column) {
method Column (line 6705) | explicit Column(std::string const& text) { m_strings.push_back(t...
method width (line 6707) | auto width(size_t newWidth) -> Column& {
method indent (line 6712) | auto indent(size_t newIndent) -> Column& {
method initialIndent (line 6716) | auto initialIndent(size_t newIndent) -> Column& {
method width (line 6721) | auto width() const -> size_t { return m_width; }
method begin (line 6722) | auto begin() const -> iterator { return iterator(*this); }
method end (line 6723) | auto end() const -> iterator { return { *this, m_strings.size() ...
method friend (line 6725) | inline friend std::ostream& operator << (std::ostream& os, Colum...
method toString (line 6739) | auto toString() const -> std::string {
class Spacer (line 6746) | class Spacer : public Column {
method Spacer (line 6749) | explicit Spacer(size_t spaceWidth) : Column("") {
class Columns (line 6754) | class Columns {
class iterator (line 6759) | class iterator {
type EndTag (line 6761) | struct EndTag {}
method iterator (line 6767) | iterator(Columns const& columns, EndTag)
method iterator (line 6783) | explicit iterator(Columns const& columns)
method begin (line 6831) | auto begin() const -> iterator { return iterator(*this); }
method end (line 6832) | auto end() const -> iterator { return { *this, iterator::EndTag(...
method friend (line 6844) | inline friend std::ostream& operator << (std::ostream& os, Colum...
method toString (line 6857) | auto toString() const -> std::string {
type detail (line 6889) | namespace detail {
type UnaryLambdaTraits (line 6893) | struct UnaryLambdaTraits : UnaryLambdaTraits<decltype( &L::operato...
type UnaryLambdaTraits<ReturnT( ClassT::* )( ArgT ) const> (line 6901) | struct UnaryLambdaTraits<ReturnT( ClassT::* )( ArgT ) const> {
class TokenStream (line 6907) | class TokenStream
method loadBuffer (line 6955) | void loadBuffer() {
method TokenStream (line 6987) | explicit TokenStream( Args const &args ) : TokenStream( args.m_a...
method TokenStream (line 6989) | TokenStream( Iterator it, Iterator itEnd ) : it( it ), itEnd( it...
method count (line 6997) | auto count() const -> size_t { return m_tokenBuffer.size() + (it...
class Args (line 6910) | class Args {
method Args (line 6916) | Args( int argc, char const* const* argv )
method Args (line 6920) | Args( std::initializer_list<std::string> args )
method exeName (line 6925) | auto exeName() const -> std::string {
type TokenType (line 6932) | enum class TokenType {
type Token (line 6935) | struct Token {
function isOptPrefix (line 6940) | inline auto isOptPrefix( char c ) -> bool {
class TokenStream (line 6949) | class TokenStream {
method loadBuffer (line 6955) | void loadBuffer() {
method TokenStream (line 6987) | explicit TokenStream( Args const &args ) : TokenStream( args.m_a...
method TokenStream (line 6989) | TokenStream( Iterator it, Iterator itEnd ) : it( it ), itEnd( it...
method count (line 6997) | auto count() const -> size_t { return m_tokenBuffer.size() + (it...
class ResultBase (line 7021) | class ResultBase {
type Type (line 7023) | enum Type {
method ResultBase (line 7028) | ResultBase( Type type ) : m_type( type ) {}
class ResultValueBase (line 7037) | class ResultValueBase : public ResultBase {
method value (line 7039) | auto value() const -> T const & {
method ResultValueBase (line 7045) | ResultValueBase( Type type ) : ResultBase( type ) {}
method ResultValueBase (line 7047) | ResultValueBase( ResultValueBase const &other ) : ResultBase( ot...
method ResultValueBase (line 7052) | ResultValueBase( Type, T const &value ) : ResultBase( Ok ) {
class ResultValueBase<void> (line 7076) | class ResultValueBase<void> : public ResultBase {
class BasicResult (line 7082) | class BasicResult : public ResultValueBase<T> {
method BasicResult (line 7085) | explicit BasicResult( BasicResult<U> const &other )
method ok (line 7093) | static auto ok( U const &value ) -> BasicResult { return { Resul...
method ok (line 7094) | static auto ok() -> BasicResult { return { ResultBase::Ok }; }
method logicError (line 7095) | static auto logicError( std::string const &message ) -> BasicRes...
method runtimeError (line 7096) | static auto runtimeError( std::string const &message ) -> BasicR...
method type (line 7099) | auto type() const -> ResultBase::Type { return m_type; }
method errorMessage (line 7100) | auto errorMessage() const -> std::string { return m_errorMessage; }
method enforceOk (line 7103) | void enforceOk() const override {
method BasicResult (line 7115) | BasicResult( ResultBase::Type type, std::string const &message )
type ParseResultType (line 7126) | enum class ParseResultType {
class ParseState (line 7130) | class ParseState {
method ParseState (line 7133) | ParseState( ParseResultType type, TokenStream const &remainingTo...
method type (line 7138) | auto type() const -> ParseResultType { return m_type; }
method remainingTokens (line 7139) | auto remainingTokens() const -> TokenStream { return m_remaining...
type HelpColumns (line 7150) | struct HelpColumns {
function convertInto (line 7156) | inline auto convertInto( std::string const &source, T& target ) ->...
function convertInto (line 7165) | inline auto convertInto( std::string const &source, std::string& t...
function convertInto (line 7169) | inline auto convertInto( std::string const &source, bool &target )...
function convertInto (line 7182) | inline auto convertInto( std::string const &source, CLARA_CONFIG_O...
type NonCopyable (line 7191) | struct NonCopyable {
method NonCopyable (line 7192) | NonCopyable() = default;
method NonCopyable (line 7193) | NonCopyable( NonCopyable const & ) = delete;
method NonCopyable (line 7194) | NonCopyable( NonCopyable && ) = delete;
method NonCopyable (line 7195) | NonCopyable &operator=( NonCopyable const & ) = delete;
method NonCopyable (line 7196) | NonCopyable &operator=( NonCopyable && ) = delete;
type BoundRef (line 7199) | struct BoundRef : NonCopyable {
method isContainer (line 7201) | virtual auto isContainer() const -> bool { return false; }
method isFlag (line 7202) | virtual auto isFlag() const -> bool { return false; }
type BoundValueRefBase (line 7204) | struct BoundValueRefBase : BoundRef {
type BoundFlagRefBase (line 7207) | struct BoundFlagRefBase : BoundRef {
method isFlag (line 7209) | virtual auto isFlag() const -> bool { return true; }
type BoundValueRef (line 7213) | struct BoundValueRef : BoundValueRefBase {
method BoundValueRef (line 7216) | explicit BoundValueRef( T &ref ) : m_ref( ref ) {}
method setValue (line 7218) | auto setValue( std::string const &arg ) -> ParserResult override {
type BoundValueRef<std::vector<T>> (line 7224) | struct BoundValueRef<std::vector<T>> : BoundValueRefBase {
method BoundValueRef (line 7227) | explicit BoundValueRef( std::vector<T> &ref ) : m_ref( ref ) {}
method isContainer (line 7229) | auto isContainer() const -> bool override { return true; }
method setValue (line 7231) | auto setValue( std::string const &arg ) -> ParserResult override {
type BoundFlagRef (line 7240) | struct BoundFlagRef : BoundFlagRefBase {
method BoundFlagRef (line 7243) | explicit BoundFlagRef( bool &ref ) : m_ref( ref ) {}
method setFlag (line 7245) | auto setFlag( bool flag ) -> ParserResult override {
type LambdaInvoker (line 7252) | struct LambdaInvoker {
method invoke (line 7256) | static auto invoke( L const &lambda, ArgType const &arg ) -> Par...
type LambdaInvoker<void> (line 7262) | struct LambdaInvoker<void> {
method invoke (line 7264) | static auto invoke( L const &lambda, ArgType const &arg ) -> Par...
function invokeLambda (line 7271) | inline auto invokeLambda( L const &lambda, std::string const &arg ...
type BoundLambda (line 7280) | struct BoundLambda : BoundValueRefBase {
method BoundLambda (line 7284) | explicit BoundLambda( L const &lambda ) : m_lambda( lambda ) {}
method setValue (line 7286) | auto setValue( std::string const &arg ) -> ParserResult override {
type BoundFlagLambda (line 7292) | struct BoundFlagLambda : BoundFlagRefBase {
method BoundFlagLambda (line 7298) | explicit BoundFlagLambda( L const &lambda ) : m_lambda( lambda ) {}
method setFlag (line 7300) | auto setFlag( bool flag ) -> ParserResult override {
type Optionality (line 7305) | enum class Optionality { Optional, Required }
type Parser (line 7307) | struct Parser
method getHelpColumns (line 7613) | auto getHelpColumns() const -> std::vector<HelpColumns> {
method writeToStream (line 7622) | void writeToStream( std::ostream &os ) const {
method validate (line 7668) | auto validate() const -> Result override {
method parse (line 7684) | auto parse( std::string const& exeName, TokenStream const &token...
class ParserBase (line 7309) | class ParserBase {
method validate (line 7312) | virtual auto validate() const -> Result { return Result::ok(); }
method cardinality (line 7314) | virtual auto cardinality() const -> size_t { return 1; }
method parse (line 7316) | auto parse( Args const &args ) const -> InternalParseResult {
class ComposableParserImpl (line 7322) | class ComposableParserImpl : public ParserBase {
class ParserRefImpl (line 7333) | class ParserRefImpl : public ComposableParserImpl<DerivedT> {
method ParserRefImpl (line 7340) | explicit ParserRefImpl( std::shared_ptr<BoundRef> const &ref ) :...
method ParserRefImpl (line 7344) | ParserRefImpl( T &ref, std::string const &hint )
method ParserRefImpl (line 7350) | ParserRefImpl( LambdaT const &ref, std::string const &hint )
method optional (line 7360) | auto optional() -> DerivedT & {
method required (line 7365) | auto required() -> DerivedT & {
method isOptional (line 7370) | auto isOptional() const -> bool {
method cardinality (line 7374) | auto cardinality() const -> size_t override {
method hint (line 7381) | auto hint() const -> std::string { return m_hint; }
class ExeName (line 7384) | class ExeName : public ComposableParserImpl<ExeName> {
method makeRef (line 7389) | static auto makeRef(LambdaT const &lambda) -> std::shared_ptr<Bo...
method ExeName (line 7394) | ExeName() : m_name( std::make_shared<std::string>( "<executable>...
method ExeName (line 7396) | explicit ExeName( std::string &ref ) : ExeName() {
method ExeName (line 7401) | explicit ExeName( LambdaT const& lambda ) : ExeName() {
method parse (line 7406) | auto parse( std::string const&, TokenStream const &tokens ) cons...
method name (line 7410) | auto name() const -> std::string { return *m_name; }
method set (line 7411) | auto set( std::string const& newName ) -> ParserResult {
class Arg (line 7426) | class Arg : public ParserRefImpl<Arg> {
method parse (line 7430) | auto parse( std::string const &, TokenStream const &tokens ) con...
function normaliseOpt (line 7451) | inline auto normaliseOpt( std::string const &optName ) -> std::str...
class Opt (line 7460) | class Opt : public ParserRefImpl<Opt> {
method Opt (line 7466) | explicit Opt( LambdaT const &ref ) : ParserRefImpl( std::make_sh...
method Opt (line 7468) | explicit Opt( bool &ref ) : ParserRefImpl( std::make_shared<Boun...
method Opt (line 7471) | Opt( LambdaT const &ref, std::string const &hint ) : ParserRefIm...
method Opt (line 7474) | Opt( T &ref, std::string const &hint ) : ParserRefImpl( ref, hin...
method getHelpColumns (line 7481) | auto getHelpColumns() const -> std::vector<HelpColumns> {
method isMatch (line 7496) | auto isMatch( std::string const &optToken ) const -> bool {
method parse (line 7507) | auto parse( std::string const&, TokenStream const &tokens ) cons...
method validate (line 7543) | auto validate() const -> Result override {
type Help (line 7561) | struct Help : Opt {
method Help (line 7562) | Help( bool &showHelpFlag )
type Parser (line 7575) | struct Parser : ParserBase {
method getHelpColumns (line 7613) | auto getHelpColumns() const -> std::vector<HelpColumns> {
method writeToStream (line 7622) | void writeToStream( std::ostream &os ) const {
method validate (line 7668) | auto validate() const -> Result override {
method parse (line 7684) | auto parse( std::string const& exeName, TokenStream const &token...
type clara (line 6888) | namespace clara {
type TextFlow (line 6563) | namespace TextFlow {
function isWhitespace (line 6565) | inline auto isWhitespace(char c) -> bool {
function isBreakableBefore (line 6569) | inline auto isBreakableBefore(char c) -> bool {
function isBreakableAfter (line 6573) | inline auto isBreakableAfter(char c) -> bool {
class Columns (line 6578) | class Columns
class iterator (line 6759) | class iterator {
type EndTag (line 6761) | struct EndTag {}
method iterator (line 6767) | iterator(Columns const& columns, EndTag)
method iterator (line 6783) | explicit iterator(Columns const& columns)
method begin (line 6831) | auto begin() const -> iterator { return iterator(*this); }
method end (line 6832) | auto end() const -> iterator { return { *this, iterator::EndTag(...
method friend (line 6844) | inline friend std::ostream& operator << (std::ostream& os, Colum...
method toString (line 6857) | auto toString() const -> std::string {
class Column (line 6580) | class Column {
class iterator (line 6587) | class iterator {
method iterator (line 6598) | iterator(Column const& column, size_t stringIndex)
method line (line 6602) | auto line() const -> std::string const& { return m_column.m_st...
method isBoundary (line 6604) | auto isBoundary(size_t at) const -> bool {
method calcLength (line 6614) | void calcLength() {
method indent (line 6641) | auto indent() const -> size_t {
method addIndentAndSuffix (line 6646) | auto addIndentAndSuffix(std::string const &plain) const -> std...
method iterator (line 6657) | explicit iterator(Column const& column) : m_column(column) {
method Column (line 6705) | explicit Column(std::string const& text) { m_strings.push_back(t...
method width (line 6707) | auto width(size_t newWidth) -> Column& {
method indent (line 6712) | auto indent(size_t newIndent) -> Column& {
method initialIndent (line 6716) | auto initialIndent(size_t newIndent) -> Column& {
method width (line 6721) | auto width() const -> size_t { return m_width; }
method begin (line 6722) | auto begin() const -> iterator { return iterator(*this); }
method end (line 6723) | auto end() const -> iterator { return { *this, m_strings.size() ...
method friend (line 6725) | inline friend std::ostream& operator << (std::ostream& os, Colum...
method toString (line 6739) | auto toString() const -> std::string {
class Spacer (line 6746) | class Spacer : public Column {
method Spacer (line 6749) | explicit Spacer(size_t spaceWidth) : Column("") {
class Columns (line 6754) | class Columns {
class iterator (line 6759) | class iterator {
type EndTag (line 6761) | struct EndTag {}
method iterator (line 6767) | iterator(Columns const& columns, EndTag)
method iterator (line 6783) | explicit iterator(Columns const& columns)
method begin (line 6831) | auto begin() const -> iterator { return iterator(*this); }
method end (line 6832) | auto end() const -> iterator { return { *this, iterator::EndTag(...
method friend (line 6844) | inline friend std::ostream& operator << (std::ostream& os, Colum...
method toString (line 6857) | auto toString() const -> std::string {
type detail (line 6889) | namespace detail {
type UnaryLambdaTraits (line 6893) | struct UnaryLambdaTraits : UnaryLambdaTraits<decltype( &L::operato...
type UnaryLambdaTraits<ReturnT( ClassT::* )( ArgT ) const> (line 6901) | struct UnaryLambdaTraits<ReturnT( ClassT::* )( ArgT ) const> {
class TokenStream (line 6907) | class TokenStream
method loadBuffer (line 6955) | void loadBuffer() {
method TokenStream (line 6987) | explicit TokenStream( Args const &args )
Condensed preview — 314 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,766K chars).
[
{
"path": ".gitignore",
"chars": 338,
"preview": "# exclude all object files\nsrc/*.o\nsrc/riscvsim/*.o\nsrc/slirp/*.o\n\n# exclude all dependency files\nsrc/*.d\nsrc/riscvsim/*"
},
{
"path": ".gitmodules",
"chars": 0,
"preview": ""
},
{
"path": "Changelog.md",
"chars": 6561,
"preview": "# Version 4.1a\n\n - Added\n\t - Model a arbitrary fixed latency between LLC cache and Memory controller\n - Changed\n\t - For "
},
{
"path": "LICENSE.md",
"chars": 1192,
"preview": "MIT License\n\nCopyright (c) 2016-2017 Fabrice Bellard\nCopyright (c) 2017-2019 Gaurav Kothari\nCopyright (c) 2018-2019 Pari"
},
{
"path": "README.md",
"chars": 18537,
"preview": "## MARSS-RISCV: Micro-Architectural System Simulator for RISC-V\n\nMARSS-RISCV (Micro-ARchitectural System Simulator - RIS"
},
{
"path": "configs/riscv64_inorder_soc.cfg",
"chars": 3338,
"preview": "/* VM configuration file */\n{\n\tversion: 1,\n\tmachine: \"riscv64\", /* riscv32, riscv64 */\n\tmemory_size: 2048, /* MB */\n\tbio"
},
{
"path": "configs/riscv64_outoforder_soc.cfg",
"chars": 3330,
"preview": "/* VM configuration file */\n{\n\tversion: 1,\n\tmachine: \"riscv64\", /* riscv32, riscv64 */\n\tmemory_size: 2048, /* MB */\n\tbio"
},
{
"path": "src/DRAMsim3/.clang-format",
"chars": 3292,
"preview": "---\nLanguage: Cpp\n# BasedOnStyle: Google\nAccessModifierOffset: -1\nAlignAfterOpenBracket: Align\nAlignConsecutiveA"
},
{
"path": "src/DRAMsim3/.gitignore",
"chars": 414,
"preview": "# project files\nbuild/\ndebug_build/\ndata/\next/SuperLU_MT_3.1/\nobj\ndramsim3\ndramsim3test\ndramsim3main\n*.log\nrelease\n.idea"
},
{
"path": "src/DRAMsim3/.gitmodules",
"chars": 132,
"preview": "[submodule \"ext/SuperLU_MT_3.1\"]\n\tpath = ext/SuperLU_MT_3.1\n\turl = https://github.com/umd-memsys/SuperLU_MT_3.1.git\n\tign"
},
{
"path": "src/DRAMsim3/.travis.yml",
"chars": 258,
"preview": "dist: trusty\n#sudo: required\nsudo: false\n\nlanguage: cpp\nwarnings_are_errors: true\n\ncompiler:\n# - gcc\n - clang\n\n#addons:\n"
},
{
"path": "src/DRAMsim3/CMakeLists.txt",
"chars": 3783,
"preview": "cmake_minimum_required(VERSION 3.0.0)\nproject(dramsim3)\n\nset(default_build_type \"Release\")\nif(NOT CMAKE_BUILD_TYPE AND N"
},
{
"path": "src/DRAMsim3/LICENSE",
"chars": 1090,
"preview": "Copyright (c) 2019, University of Maryland Memory-Systems Research\n\nPermission is hereby granted, free of charge, to any"
},
{
"path": "src/DRAMsim3/Makefile",
"chars": 1156,
"preview": "# ONLY use this makefile if you do NOT have a cmake 3.0+ version\n\nCC=gcc\nCXX=g++\n\nFMT_LIB_DIR=ext/fmt/include\nINI_LIB_DI"
},
{
"path": "src/DRAMsim3/README.md",
"chars": 7104,
"preview": "[](https://travis-ci.com/umd-memsys/DRAMsim3"
},
{
"path": "src/DRAMsim3/configs/DDR3_1Gb_x8_1333.ini",
"chars": 1041,
"preview": "[dram_structure]\nprotocol = DDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 16384\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR3_4Gb_x16_1600.ini",
"chars": 817,
"preview": "[dram_structure]\nprotocol = DDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 32768\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR3_4Gb_x16_1866.ini",
"chars": 817,
"preview": "[dram_structure]\nprotocol = DDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 32768\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR3_4Gb_x4_1600.ini",
"chars": 817,
"preview": "[dram_structure]\nprotocol = DDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 65536\ncolumns = 2048\ndevice_width = 4\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR3_4Gb_x4_1866.ini",
"chars": 817,
"preview": "[dram_structure]\nprotocol = DDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 65536\ncolumns = 2048\ndevice_width = 4\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR3_4Gb_x8_1600.ini",
"chars": 816,
"preview": "[dram_structure]\nprotocol = DDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 65536\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR3_4Gb_x8_1866.ini",
"chars": 816,
"preview": "[dram_structure]\nprotocol = DDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 65536\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR3_8Gb_x16_1600.ini",
"chars": 817,
"preview": "[dram_structure]\nprotocol = DDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 65536\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR3_8Gb_x16_1866.ini",
"chars": 817,
"preview": "[dram_structure]\nprotocol = DDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 65536\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR3_8Gb_x4_1600.ini",
"chars": 817,
"preview": "[dram_structure]\nprotocol = DDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 65536\ncolumns = 4096\ndevice_width = 4\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR3_8Gb_x4_1866.ini",
"chars": 817,
"preview": "[dram_structure]\nprotocol = DDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 65536\ncolumns = 4096\ndevice_width = 4\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR3_8Gb_x8_1600.ini",
"chars": 817,
"preview": "[dram_structure]\nprotocol = DDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 65536\ncolumns = 2048\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR3_8Gb_x8_1866.ini",
"chars": 817,
"preview": "[dram_structure]\nprotocol = DDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 65536\ncolumns = 2048\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x16_1866.ini",
"chars": 818,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 32768\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x16_2133.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 32768\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x16_2133_2.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 32768\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x16_2400.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 32768\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x16_2400_2.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 32768\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x16_2666.ini",
"chars": 822,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 32768\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x16_2666_2.ini",
"chars": 822,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 32768\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x4_1866.ini",
"chars": 818,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 4\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x4_2133.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 4\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x4_2133_2.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 4\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x4_2400.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 4\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x4_2400_2.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 4\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x4_2666.ini",
"chars": 822,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 4\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x4_2666_2.ini",
"chars": 822,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 4\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x8_1866.ini",
"chars": 817,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 32768\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x8_2133.ini",
"chars": 818,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 32768\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x8_2133_2.ini",
"chars": 818,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 32768\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x8_2400.ini",
"chars": 818,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 32768\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x8_2400_2.ini",
"chars": 818,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 32768\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x8_2666.ini",
"chars": 821,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 32768\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_4Gb_x8_2666_2.ini",
"chars": 821,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 32768\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x16_1866.ini",
"chars": 818,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x16_2133.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x16_2133_2.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x16_2400.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x16_2400_2.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x16_2666.ini",
"chars": 822,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x16_2666_2.ini",
"chars": 822,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x16_2933.ini",
"chars": 823,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x16_2933_2.ini",
"chars": 823,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x16_3200.ini",
"chars": 824,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 16\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x4_1866.ini",
"chars": 818,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 131072\ncolumns = 1024\ndevice_width = 4\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x4_2133.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 131072\ncolumns = 1024\ndevice_width = 4\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x4_2133_2.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 131072\ncolumns = 1024\ndevice_width = 4\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x4_2400.ini",
"chars": 820,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 131072\ncolumns = 1024\ndevice_width = 4\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x4_2400_2.ini",
"chars": 820,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 131072\ncolumns = 1024\ndevice_width = 4\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x4_2666.ini",
"chars": 823,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 131072\ncolumns = 1024\ndevice_width = 4\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x4_2666_2.ini",
"chars": 823,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 131072\ncolumns = 1024\ndevice_width = 4\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x4_2933.ini",
"chars": 823,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 131072\ncolumns = 1024\ndevice_width = 4\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x4_2933_2.ini",
"chars": 823,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 131072\ncolumns = 1024\ndevice_width = 4\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x4_3200.ini",
"chars": 824,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 131072\ncolumns = 1024\ndevice_width = 4\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x8_1866.ini",
"chars": 818,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x8_2133.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x8_2133_2.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x8_2400.ini",
"chars": 1174,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x8_2400_2.ini",
"chars": 819,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x8_2666.ini",
"chars": 822,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x8_2666_2.ini",
"chars": 822,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x8_2933.ini",
"chars": 822,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x8_2933_2.ini",
"chars": 822,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/DDR4_8Gb_x8_3200.ini",
"chars": 823,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/GDDR5X_8Gb_x32.ini",
"chars": 1193,
"preview": "[dram_structure]\nprotocol = GDDR5X\nbankgroups = 4\nbanks_per_group = 4\nrows = 16384\ncolumns = 64\ndevice_width = 32\nBL = 1"
},
{
"path": "src/DRAMsim3/configs/GDDR5_1Gb_x32.ini",
"chars": 877,
"preview": "[dram_structure]\nprotocol = GDDR5\nbankgroups = 4\nbanks_per_group = 4\nrows = 4096\ncolumns = 64\ndevice_width = 32\nBL = 8\nb"
},
{
"path": "src/DRAMsim3/configs/GDDR5_8Gb_x32.ini",
"chars": 888,
"preview": "[dram_structure]\nprotocol = GDDR5\nbankgroups = 4\nbanks_per_group = 4\nrows = 16384\ncolumns = 128\ndevice_width = 32\nBL = 8"
},
{
"path": "src/DRAMsim3/configs/GDDR6_8Gb_x16.ini",
"chars": 902,
"preview": "[dram_structure]\nprotocol = GDDR6\nbankgroups = 4\nbanks_per_group = 4\nrows = 16384\ncolumns = 128\ndevice_width = 16\nBL = 1"
},
{
"path": "src/DRAMsim3/configs/HBM1_4Gb_x128.ini",
"chars": 781,
"preview": "[dram_structure]\nprotocol = HBM\nbankgroups = 4\nbanks_per_group = 4\nrows = 16384\ncolumns = 64\ndevice_width = 128\nBL = 4\nn"
},
{
"path": "src/DRAMsim3/configs/HBM2_4Gb_x128.ini",
"chars": 789,
"preview": "[dram_structure]\nprotocol = HBM\nbankgroups = 4\nbanks_per_group = 4\nrows = 16384\ncolumns = 64\ndevice_width = 128\nBL = 4\nn"
},
{
"path": "src/DRAMsim3/configs/HBM2_8Gb_x128.ini",
"chars": 790,
"preview": "[dram_structure]\nprotocol = HBM\nbankgroups = 4\nbanks_per_group = 4\nrows = 32768\ncolumns = 64\ndevice_width = 128\nBL = 4\nn"
},
{
"path": "src/DRAMsim3/configs/HBM_4Gb_x128.ini",
"chars": 1246,
"preview": "[dram_structure]\nprotocol = HBM\nbankgroups = 4\nbanks_per_group = 4\nrows = 16384\ncolumns = 64\ndevice_width = 128\nBL = 4\nn"
},
{
"path": "src/DRAMsim3/configs/HMC2_8GB_4Lx16.ini",
"chars": 1200,
"preview": "[hmc]\nnum_links = 4\nlink_width = 16\nlink_speed = 25000\nblock_size = 64\nxbar_queue_depth = 32\n\n[dram_structure]\nprotocol "
},
{
"path": "src/DRAMsim3/configs/HMC_2GB_4Lx16.ini",
"chars": 1196,
"preview": "[hmc]\nnum_links = 4\nlink_width = 16\nlink_speed = 10000\nblock_size = 64\nxbar_queue_depth = 6\n\n[dram_structure]\nprotocol ="
},
{
"path": "src/DRAMsim3/configs/HMC_2GB_4Lx16_dummy.ini",
"chars": 1204,
"preview": "[hmc]\nnum_links = 4\nlink_width = 16\nlink_speed = 10000\nblock_size = 128\nxbar_queue_depth = 6\n\n[dram_structure]\nprotocol "
},
{
"path": "src/DRAMsim3/configs/HMC_4GB_4Lx16.ini",
"chars": 870,
"preview": "[hmc]\nnum_links = 4\nlink_width = 16\nlink_speed = 15000\nblock_size = 64\nxbar_queue_depth = 6\n\n[dram_structure]\nprotocol ="
},
{
"path": "src/DRAMsim3/configs/LPDDR3_8Gb_x32_1333.ini",
"chars": 848,
"preview": "[dram_structure]\nprotocol = LPDDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 32768\ncolumns = 1024\ndevice_width = 32\nBL ="
},
{
"path": "src/DRAMsim3/configs/LPDDR3_8Gb_x32_1600.ini",
"chars": 849,
"preview": "[dram_structure]\nprotocol = LPDDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 32768\ncolumns = 1024\ndevice_width = 32\nBL ="
},
{
"path": "src/DRAMsim3/configs/LPDDR3_8Gb_x32_1866.ini",
"chars": 852,
"preview": "[dram_structure]\nprotocol = LPDDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 32768\ncolumns = 1024\ndevice_width = 32\nBL ="
},
{
"path": "src/DRAMsim3/configs/LPDDR4_8Gb_x16_2400.ini",
"chars": 833,
"preview": "[dram_structure]\nprotocol = LPDDR4\nbankgroups = 2\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 16\nBL ="
},
{
"path": "src/DRAMsim3/configs/ST-1.2x.ini",
"chars": 3127,
"preview": "; (C) Copyright 2006-2018 Barcelona Supercomputing Center (BSC) \n;\n;The copyright holder is BSC-CNS, and the authorship"
},
{
"path": "src/DRAMsim3/configs/ST-1.5x.ini",
"chars": 3153,
"preview": "; (C) Copyright 2006-2018 Barcelona Supercomputing Center (BSC) \n;\n;The copyright holder is BSC-CNS, and the authorship"
},
{
"path": "src/DRAMsim3/configs/ST-2.0x.ini",
"chars": 3145,
"preview": "; (C) Copyright 2006-2018 Barcelona Supercomputing Center (BSC) \n;\n;The copyright holder is BSC-CNS, and the authorship"
},
{
"path": "src/DRAMsim3/configs/ddr3_debug.ini",
"chars": 696,
"preview": "[dram_structure]\nprotocol = DDR3\nbankgroups = 1\nbanks_per_group = 8\nrows = 16384\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/ddr4_debug.ini",
"chars": 888,
"preview": "[dram_structure]\nprotocol = DDR4\nbankgroups = 4\nbanks_per_group = 4\nrows = 65536\ncolumns = 1024\ndevice_width = 8\nBL = 8\n"
},
{
"path": "src/DRAMsim3/configs/lpddr_2Gb_x16.ini",
"chars": 937,
"preview": "[dram_structure]\nprotocol = LPDDR\nbankgroups = 1\nbanks_per_group = 4\nrows = 16384\ncolumns = 2048\ndevice_width = 16\nBL = "
},
{
"path": "src/DRAMsim3/ext/fmt/LICENSE.rst",
"chars": 1310,
"preview": "Copyright (c) 2012 - 2016, Victor Zverovich\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, wi"
},
{
"path": "src/DRAMsim3/ext/fmt/include/fmt/core.h",
"chars": 47525,
"preview": "// Formatting library for C++ - the core API\n//\n// Copyright (c) 2012 - present, Victor Zverovich\n// All rights reserved"
},
{
"path": "src/DRAMsim3/ext/fmt/include/fmt/format-inl.h",
"chars": 32371,
"preview": "// Formatting library for C++\n//\n// Copyright (c) 2012 - 2016, Victor Zverovich\n// All rights reserved.\n//\n// For the li"
},
{
"path": "src/DRAMsim3/ext/fmt/include/fmt/format.h",
"chars": 113398,
"preview": "/*\n Formatting library for C++\n\n Copyright (c) 2012 - present, Victor Zverovich\n All rights reserved.\n\n Redistribution a"
},
{
"path": "src/DRAMsim3/ext/headers/INIHLICENSE.txt",
"chars": 1510,
"preview": "\nThe \"inih\" library is distributed under the New BSD license:\n\nCopyright (c) 2009, Ben Hoyt\nAll rights reserved.\n\nRedist"
},
{
"path": "src/DRAMsim3/ext/headers/INIReader.h",
"chars": 13220,
"preview": "// Read an INI file into easy-to-access name/value pairs.\n\n// inih and INIReader are released under the New BSD license "
},
{
"path": "src/DRAMsim3/ext/headers/args.hxx",
"chars": 73727,
"preview": "/* Copyright (c) 2016 Taylor C. Richberger <taywee@gmx.com>\n * \n * Permission is hereby granted, free of charge, to any "
},
{
"path": "src/DRAMsim3/ext/headers/catch.hpp",
"chars": 517035,
"preview": "/*\n * Catch v2.7.0\n * Generated: 2019-03-07 21:34:30.252164\n * ------------------------------------------------------"
},
{
"path": "src/DRAMsim3/ext/headers/json.hpp",
"chars": 716479,
"preview": "/*\n __ _____ _____ _____\n __| | __| | | | JSON for Modern C++\n| | |__ | | | | | | version 3.5.0\n|___"
},
{
"path": "src/DRAMsim3/scripts/batch_run.py",
"chars": 5558,
"preview": "#!/usr/bin/python\n\n\"\"\"\nRun a batch of configs\n\"\"\"\n\nimport argparse\nimport os\nimport shlex\nimport subprocess\nimport sys\ni"
},
{
"path": "src/DRAMsim3/scripts/final_PowerTemperature_map.py",
"chars": 2884,
"preview": "import argparse\nfrom numpy import genfromtxt\nfrom numpy import amax\nimport numpy as np\nimport matplotlib.pyplot as plt\nf"
},
{
"path": "src/DRAMsim3/scripts/heatmap.py",
"chars": 6939,
"preview": "#!/usr/bin/env python3\nimport argparse\nimport os\nimport sys\nfrom collections import OrderedDict\n\ntry:\n import numpy a"
},
{
"path": "src/DRAMsim3/scripts/parse_config.py",
"chars": 3737,
"preview": "#!/usr/bin/env python3\nimport sys\nimport tempfile\nimport configparser\n\ndef get_val(config, sec, opt):\n \"\"\"\n get va"
},
{
"path": "src/DRAMsim3/scripts/plot_stats.py",
"chars": 4664,
"preview": "#!/usr/bin/env python3\n\"\"\"\nGenerate time series graphs of power/bandwidth/energy...\n\"\"\"\n\nimport argparse\nimport json\nimp"
},
{
"path": "src/DRAMsim3/scripts/trace_gen.py",
"chars": 5279,
"preview": "#!/usr/bin/env python3\n\nimport argparse\nimport os\nimport random\n\n\nclass Generator():\n \"\"\"\n Format agnostic address"
},
{
"path": "src/DRAMsim3/scripts/validation.py",
"chars": 22864,
"preview": "#!/usr/bin/env python3\nimport os\nimport sys\nimport parse_config\n\nclass Command(object):\n \"\"\"\n providing a data str"
},
{
"path": "src/DRAMsim3/src/bankstate.cc",
"chars": 6304,
"preview": "#include \"bankstate.h\"\n\nnamespace dramsim3 {\n\nBankState::BankState()\n : state_(State::CLOSED),\n cmd_timing_(stat"
},
{
"path": "src/DRAMsim3/src/bankstate.h",
"chars": 1081,
"preview": "#ifndef __BANKSTATE_H\n#define __BANKSTATE_H\n\n#include <vector>\n#include \"common.h\"\n\nnamespace dramsim3 {\n\nclass BankStat"
},
{
"path": "src/DRAMsim3/src/channel_state.cc",
"chars": 10510,
"preview": "#include \"channel_state.h\"\n\nnamespace dramsim3 {\nChannelState::ChannelState(const Config& config, const Timing& timing)\n"
},
{
"path": "src/DRAMsim3/src/channel_state.h",
"chars": 3162,
"preview": "#ifndef __CHANNEL_STATE_H\n#define __CHANNEL_STATE_H\n\n#include <vector>\n#include \"bankstate.h\"\n#include \"common.h\"\n#inclu"
},
{
"path": "src/DRAMsim3/src/command_queue.cc",
"chars": 7148,
"preview": "#include \"command_queue.h\"\n\nnamespace dramsim3 {\n\nCommandQueue::CommandQueue(int channel_id, const Config& config,\n "
},
{
"path": "src/DRAMsim3/src/command_queue.h",
"chars": 1834,
"preview": "#ifndef __COMMAND_QUEUE_H\n#define __COMMAND_QUEUE_H\n\n#include <unordered_set>\n#include <vector>\n#include \"channel_state."
},
{
"path": "src/DRAMsim3/src/common.cc",
"chars": 2658,
"preview": "#include \"common.h\"\n#include \"fmt/format.h\"\n#include <sstream>\n#include <unordered_set>\n#include <sys/stat.h>\n\nnamespace"
},
{
"path": "src/DRAMsim3/src/common.h",
"chars": 3729,
"preview": "#ifndef __COMMON_H\n#define __COMMON_H\n\n#include <stdint.h>\n#include <iostream>\n#include <vector>\n\nnamespace dramsim3 {\n\n"
},
{
"path": "src/DRAMsim3/src/configuration.cc",
"chars": 16625,
"preview": "#include \"configuration.h\"\n\n#include <vector>\n\n#ifdef THERMAL\n#include <math.h>\n#endif // THERMAL\n\nnamespace dramsim3 {"
},
{
"path": "src/DRAMsim3/src/configuration.h",
"chars": 4826,
"preview": "#ifndef __CONFIG_H\n#define __CONFIG_H\n\n#include <fstream>\n#include <string>\n#include \"common.h\"\n\n#include \"INIReader.h\"\n"
},
{
"path": "src/DRAMsim3/src/controller.cc",
"chars": 12136,
"preview": "#include \"controller.h\"\n#include <iomanip>\n#include <iostream>\n#include <limits>\n\nnamespace dramsim3 {\n\n#ifdef THERMAL\nC"
},
{
"path": "src/DRAMsim3/src/controller.h",
"chars": 2212,
"preview": "#ifndef __CONTROLLER_H\n#define __CONTROLLER_H\n\n#include <fstream>\n#include <map>\n#include <unordered_set>\n#include <vect"
},
{
"path": "src/DRAMsim3/src/cpu.cc",
"chars": 2790,
"preview": "#include \"cpu.h\"\n\nnamespace dramsim3 {\n\nvoid RandomCPU::ClockTick() {\n // Create random CPU requests at full speed\n "
},
{
"path": "src/DRAMsim3/src/cpu.h",
"chars": 1755,
"preview": "#ifndef __CPU_H\n#define __CPU_H\n\n#include <fstream>\n#include <functional>\n#include <random>\n#include <string>\n#include \""
},
{
"path": "src/DRAMsim3/src/dram_system.cc",
"chars": 6556,
"preview": "#include \"dram_system.h\"\n\n#include <assert.h>\n\nnamespace dramsim3 {\n\n// alternative way is to assign the id in construct"
},
{
"path": "src/DRAMsim3/src/dram_system.h",
"chars": 2870,
"preview": "#ifndef __DRAM_SYSTEM_H\n#define __DRAM_SYSTEM_H\n\n#include <fstream>\n#include <string>\n#include <vector>\n\n#include \"commo"
},
{
"path": "src/DRAMsim3/src/dramsim3.h",
"chars": 1160,
"preview": "#ifndef __MEMORY_SYSTEM__H\n#define __MEMORY_SYSTEM__H\n\n#include <functional>\n#include <string>\n\nnamespace dramsim3 {\n\n//"
},
{
"path": "src/DRAMsim3/src/hmc.cc",
"chars": 20410,
"preview": "#include \"hmc.h\"\n\nnamespace dramsim3 {\n\nHMCRequest::HMCRequest(HMCReqType req_type, uint64_t hex_addr, int vault)\n : "
},
{
"path": "src/DRAMsim3/src/hmc.h",
"chars": 4326,
"preview": "#ifndef __HMC_H\n#define __HMC_H\n\n#include <functional>\n#include <map>\n#include <vector>\n\n#include \"dram_system.h\"\n\nnames"
},
{
"path": "src/DRAMsim3/src/main.cc",
"chars": 2363,
"preview": "#include <iostream>\n#include \"./../ext/headers/args.hxx\"\n#include \"cpu.h\"\n\nusing namespace dramsim3;\n\nint main(int argc,"
},
{
"path": "src/DRAMsim3/src/memory_system.cc",
"chars": 2498,
"preview": "#include \"memory_system.h\"\n\nnamespace dramsim3 {\nMemorySystem::MemorySystem(const std::string &config_file,\n "
},
{
"path": "src/DRAMsim3/src/memory_system.h",
"chars": 1513,
"preview": "#ifndef __MEMORY_SYSTEM__H\n#define __MEMORY_SYSTEM__H\n\n#include <functional>\n#include <string>\n\n#include \"configuration."
},
{
"path": "src/DRAMsim3/src/refresh.cc",
"chars": 2749,
"preview": "#include \"refresh.h\"\n\nnamespace dramsim3 {\nRefresh::Refresh(const Config &config, ChannelState &channel_state)\n : clk"
},
{
"path": "src/DRAMsim3/src/refresh.h",
"chars": 555,
"preview": "#ifndef __REFRESH_H\n#define __REFRESH_H\n\n#include <vector>\n#include \"channel_state.h\"\n#include \"common.h\"\n#include \"conf"
},
{
"path": "src/DRAMsim3/src/simple_stats.cc",
"chars": 18298,
"preview": "#include <iostream>\n\n#include \"fmt/format.h\"\n#include \"simple_stats.h\"\n\nnamespace dramsim3 {\n\ntemplate <class T>\nvoid Pr"
},
{
"path": "src/DRAMsim3/src/simple_stats.h",
"chars": 3277,
"preview": "#ifndef __SIMPLE_STATS_\n#define __SIMPLE_STATS_\n\n#include <fstream>\n#include <string>\n#include <unordered_map>\n#include "
},
{
"path": "src/DRAMsim3/src/sp_ienv.c",
"chars": 4919,
"preview": "/*! \\file\nCopyright (c) 2003, The Regents of the University of California, through\nLawrence Berkeley National Laboratory"
},
{
"path": "src/DRAMsim3/src/thermal.cc",
"chars": 34607,
"preview": "#include \"thermal.h\"\n\nextern \"C\" double *steady_thermal_solver(double ***powerM, double W, double Lc,\n "
},
{
"path": "src/DRAMsim3/src/thermal.h",
"chars": 4392,
"preview": "#ifndef __THERMAL_H\n#define __THERMAL_H\n\n#include <time.h>\n#include <cmath>\n#include <fstream>\n#include <functional>\n#in"
},
{
"path": "src/DRAMsim3/src/thermal_config.h",
"chars": 731,
"preview": "#ifndef THERMALCONFIG_H\n#define THERMALCONFIG_H\n\n#ifndef M_PI\nconst double M_PI = 3.141592653;\n#endif\n\nconst double T0 ="
},
{
"path": "src/DRAMsim3/src/thermal_replay.cc",
"chars": 9073,
"preview": "#include \"thermal_replay.h\"\n#include \"./../ext/headers/args.hxx\"\n\n// this will not be used in a library file so it's ok "
},
{
"path": "src/DRAMsim3/src/thermal_replay.h",
"chars": 924,
"preview": "#ifndef __THERMAL_REPLAY_H\n#define __THERMAL_REPLAY_H\n\n#include <fstream>\n#include <string>\n#include <vector>\n\n#include "
},
{
"path": "src/DRAMsim3/src/thermal_solver.c",
"chars": 24637,
"preview": "/* thermal solver\n * based on superLU\n * zhiyuan yang\n */\n#include <math.h>\n#include <omp.h>\n#include <stdbool.h>\n#inclu"
},
{
"path": "src/DRAMsim3/src/timing.cc",
"chars": 12886,
"preview": "#include \"timing.h\"\n#include <algorithm>\n#include <utility>\n\nnamespace dramsim3 {\n\nTiming::Timing(const Config& config)\n"
},
{
"path": "src/DRAMsim3/src/timing.h",
"chars": 630,
"preview": "#ifndef __TIMING_H\n#define __TIMING_H\n\n#include <vector>\n#include \"common.h\"\n#include \"configuration.h\"\n\nnamespace drams"
},
{
"path": "src/DRAMsim3/tests/example.trace",
"chars": 1029734,
"preview": "0x2000D5C0 READ 30\n0x1FF96FC0 WRITE 160\n0x2000D600 READ 165\n0x1FF97000 READ 192\n0x2000A340 READ 278\n0x1FF97080"
},
{
"path": "src/DRAMsim3/tests/test_config.cc",
"chars": 2998,
"preview": "#define CATCH_CONFIG_MAIN\n#include \"catch.hpp\"\n#include \"configuration.h\"\n\nTEST_CASE(\"Address Mapping\", \"[config]\") {\n "
},
{
"path": "src/DRAMsim3/tests/test_dramsys.cc",
"chars": 838,
"preview": "#include \"catch.hpp\"\n#include \"configuration.h\"\n#include \"dram_system.h\"\n\nbool call_back_called = false;\nvoid dummy_call"
},
{
"path": "src/DRAMsim3/tests/test_hmcsys.cc",
"chars": 1303,
"preview": "#include \"catch.hpp\"\n#include \"configuration.h\"\n#include \"memory_system.h\"\n\nbool hmc_called = false;\n\nvoid hmc_callback("
},
{
"path": "src/MIT-LICENSE.txt",
"chars": 1191,
"preview": "MIT License\n\nCopyright (c) 2016-2017 Fabrice Bellard\nCopyright (c) 2017-2020 Gaurav Kothari\nCopyright (c) 2018-2019 Pari"
},
{
"path": "src/Makefile",
"chars": 7104,
"preview": "#\n# TinyEMU\n# \n# Copyright (c) 2016-2018 Fabrice Bellard\n#\n# MARSS-RISCV : Micro-Architectural System Simulator for RISC"
},
{
"path": "src/VERSION",
"chars": 5,
"preview": "4.1a\n"
},
{
"path": "src/aes.c",
"chars": 61274,
"preview": "/**\n *\n * aes.c - integrated in QEMU by Fabrice Bellard from the OpenSSL project.\n */\n/*\n * rijndael-alg-fst.c\n *\n * @ve"
},
{
"path": "src/aes.h",
"chars": 1864,
"preview": "/*\n * OpenSSL compatible AES header\n * \n * Copyright (c) 2017 Fabrice Bellard\n *\n * Permission is hereby granted, free o"
},
{
"path": "src/block_net.c",
"chars": 16784,
"preview": "/*\n * HTTP block device\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of charg"
},
{
"path": "src/build_filelist.c",
"chars": 8047,
"preview": "/*\n * File list builder for RISCVEMU network filesystem\n * \n * Copyright (c) 2017 Fabrice Bellard\n *\n * Permission is he"
},
{
"path": "src/cutils.c",
"chars": 2947,
"preview": "/*\n * Misc C utilities\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge"
},
{
"path": "src/cutils.h",
"chars": 4522,
"preview": "/*\n * C utilities\n * \n * Copyright (c) 2016 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge, to any p"
},
{
"path": "src/fbuf.h",
"chars": 608,
"preview": "#ifndef FBUF_H\n#define FBUF_H\n\ntypedef struct {\n#if defined(EMSCRIPTEN)\n int handle;\n#else\n uint8_t *data;\n#endif\n"
},
{
"path": "src/fs.c",
"chars": 2876,
"preview": "/*\n * Filesystem utilities\n * \n * Copyright (c) 2016 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge,"
},
{
"path": "src/fs.h",
"chars": 7347,
"preview": "/*\n * Filesystem abstraction\n * \n * Copyright (c) 2016 Fabrice Bellard\n *\n * Permission is hereby granted, free of charg"
},
{
"path": "src/fs_disk.c",
"chars": 16870,
"preview": "/*\n * Filesystem on disk\n * \n * Copyright (c) 2016 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge, t"
},
{
"path": "src/fs_net.c",
"chars": 79850,
"preview": "/*\n * Networked Filesystem using HTTP\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * Permission is hereby granted,"
},
{
"path": "src/fs_utils.c",
"chars": 8621,
"preview": "/*\n * Misc FS utilities\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of charg"
},
{
"path": "src/fs_utils.h",
"chars": 3385,
"preview": "/*\n * Misc FS utilities\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of charg"
},
{
"path": "src/fs_wget.c",
"chars": 17541,
"preview": "/*\n * HTTP file download\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of char"
},
{
"path": "src/fs_wget.h",
"chars": 3364,
"preview": "/*\n * HTTP file download\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of char"
},
{
"path": "src/ide.c",
"chars": 22680,
"preview": "/*\n * IDE emulation\n * \n * Copyright (c) 2003-2016 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge, t"
},
{
"path": "src/ide.h",
"chars": 1434,
"preview": "/*\n * IDE emulation\n * \n * Copyright (c) 2003-2016 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge, t"
},
{
"path": "src/iomem.c",
"chars": 8342,
"preview": "/*\n * IO memory handling\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of char"
},
{
"path": "src/iomem.h",
"chars": 5476,
"preview": "/*\n * IO memory handling\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of char"
},
{
"path": "src/json.c",
"chars": 13485,
"preview": "/*\n * Pseudo JSON parser\n * \n * Copyright (c) 2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge, t"
},
{
"path": "src/json.h",
"chars": 3730,
"preview": "/*\n * Pseudo JSON parser\n * \n * Copyright (c) 2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge, t"
},
{
"path": "src/list.h",
"chars": 3033,
"preview": "/*\n * Linux klist like system\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of"
},
{
"path": "src/machine.c",
"chars": 16315,
"preview": "/*\n * VM utilities\n *\n * Copyright (c) 2017 Fabrice Bellard\n *\n * MARSS-RISCV : Micro-Architectural System Simulator for"
},
{
"path": "src/machine.h",
"chars": 6976,
"preview": "/*\n * VM definitions\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge, "
},
{
"path": "src/netinit.sh",
"chars": 1711,
"preview": "#!/bin/sh\n#\n# RISCVEMU Ethernet bridge and NAT configuration (run with sudo)\n#\n# Copyright (c) 2017 Fabrice Bellard\n#\n# "
},
{
"path": "src/pci.c",
"chars": 15950,
"preview": "/*\n * Simple PCI bus driver\n * \n * Copyright (c) 2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge"
},
{
"path": "src/pci.h",
"chars": 3358,
"preview": "/*\n * Simple PCI bus driver\n * \n * Copyright (c) 2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge"
},
{
"path": "src/pckbd.c",
"chars": 10207,
"preview": "/*\n * QEMU PC keyboard emulation\n *\n * Copyright (c) 2003 Fabrice Bellard\n *\n * Permission is hereby granted, free of ch"
},
{
"path": "src/ps2.c",
"chars": 14622,
"preview": "/*\n * QEMU PS/2 keyboard/mouse emulation\n *\n * Copyright (c) 2003 Fabrice Bellard\n *\n * Permission is hereby granted, fr"
},
{
"path": "src/ps2.h",
"chars": 1241,
"preview": "/* ps2.c */\ntypedef struct PS2MouseState PS2MouseState;\ntypedef struct PS2KbdState PS2KbdState;\n\nPS2KbdState *ps2_kbd_in"
},
{
"path": "src/riscv_cpu.c",
"chars": 42802,
"preview": "/*\n * RISCV CPU emulator\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * MARSS-RISCV : Micro-Architectural System S"
},
{
"path": "src/riscv_cpu.h",
"chars": 5225,
"preview": "/*\n * RISCV CPU emulator\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * MARSS-RISCV : Micro-Architectural System S"
},
{
"path": "src/riscv_cpu_fp_template.h",
"chars": 12426,
"preview": "/*\n * RISCV emulator\n * \n * Copyright (c) 2016 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge, to an"
},
{
"path": "src/riscv_cpu_priv.h",
"chars": 14377,
"preview": "/*\n * RISCV CPU emulator private definitions\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * MARSS-RISCV : Micro-Ar"
},
{
"path": "src/riscv_cpu_template.h",
"chars": 68440,
"preview": "/*\n * RISCV emulator\n * \n * Copyright (c) 2016 Fabrice Bellard\n *\n * MARSS-RISCV : Micro-Architectural System Simulator "
},
{
"path": "src/riscv_cpu_xlen_typedefs.h",
"chars": 1305,
"preview": "#ifndef _RISCV_CPU_XLEN_TYPEDEFS_\n#define _RISCV_CPU_XLEN_TYPEDEFS_\n\n#ifndef FLEN\n#if MAX_XLEN == 128\n#define FLEN 128\n#"
},
{
"path": "src/riscv_machine.c",
"chars": 37295,
"preview": "/*\n * RISCV machine\n * \n * Copyright (c) 2016-2017 Fabrice Bellard\n *\n * Permission is hereby granted, free of charge, t"
},
{
"path": "src/riscvsim/bpu/adaptive_predictor.c",
"chars": 12118,
"preview": "/**\n * Adaptive Predictor\n *\n * MARSS-RISCV : Micro-Architectural System Simulator for RISC-V\n *\n * Copyright (c) 2017-2"
},
{
"path": "src/riscvsim/bpu/adaptive_predictor.h",
"chars": 3470,
"preview": "/**\n * Adaptive Predictor\n *\n * MARSS-RISCV : Micro-Architectural System Simulator for RISC-V\n *\n * Copyright (c) 2017-2"
},
{
"path": "src/riscvsim/bpu/bht.c",
"chars": 3087,
"preview": "/**\n * Branch History Table\n *\n * MARSS-RISCV : Micro-Architectural System Simulator for RISC-V\n *\n * Copyright (c) 2020"
},
{
"path": "src/riscvsim/bpu/bht.h",
"chars": 1774,
"preview": "/**\n * Branch History Table\n *\n * MARSS-RISCV : Micro-Architectural System Simulator for RISC-V\n *\n * Copyright (c) 2020"
}
]
// ... and 114 more files (download for full content)
About this extraction
This page contains the full source code of the bucaps/marss-riscv GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 314 files (4.4 MB), approximately 1.2M tokens, and a symbol index with 4111 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.