diff --git a/lib/include/prjxray/memory_mapped_file.h b/lib/include/prjxray/memory_mapped_file.h index 6ed4e4ec..c2fd955d 100644 --- a/lib/include/prjxray/memory_mapped_file.h +++ b/lib/include/prjxray/memory_mapped_file.h @@ -4,6 +4,8 @@ #include #include +#include + namespace prjxray { class MemoryMappedFile { @@ -16,6 +18,10 @@ class MemoryMappedFile { void* const data() const { return data_; } const size_t size() const { return size_; } + absl::Span as_bytes() const { + return {static_cast(data_), size_}; + } + private: MemoryMappedFile(void *data, size_t size) : data_(data), size_(size) {}; diff --git a/lib/include/prjxray/xilinx/xc7series/bitstream_reader.h b/lib/include/prjxray/xilinx/xc7series/bitstream_reader.h index 7b6ad034..fad41bde 100644 --- a/lib/include/prjxray/xilinx/xc7series/bitstream_reader.h +++ b/lib/include/prjxray/xilinx/xc7series/bitstream_reader.h @@ -47,7 +47,7 @@ class BitstreamReader { // Construct a `BitstreamReader` from a Container of bytes. // Any bytes preceding an initial sync word are ignored. template - static absl::optional InitWithBytes(T &bitstream); + static absl::optional InitWithBytes(T bitstream); const std::vector &words() { return words_; }; @@ -62,7 +62,7 @@ class BitstreamReader { }; template -absl::optional BitstreamReader::InitWithBytes(T &bitstream) { +absl::optional BitstreamReader::InitWithBytes(T bitstream) { // If this is really a Xilinx 7-Series bitstream, there will be a sync // word somewhere toward the beginning. auto sync_pos = std::search(bitstream.begin(), bitstream.end(), diff --git a/tools/bitread.cc b/tools/bitread.cc index 3b81b57c..e00b4b24 100644 --- a/tools/bitread.cc +++ b/tools/bitread.cc @@ -78,10 +78,8 @@ int main(int argc, char **argv) { std::cout << "Bitstream size: " << in_file->size() << " bytes" << std::endl; - auto in_bytes = absl::Span( - static_cast(in_file->data()), - in_file->size()); - reader = xc7series::BitstreamReader::InitWithBytes(in_bytes); + reader = xc7series::BitstreamReader::InitWithBytes( + in_file->as_bytes()); } else { std::vector bitdata; while (1) { diff --git a/tools/bittool.cc b/tools/bittool.cc index 9bcd039c..38fb8800 100644 --- a/tools/bittool.cc +++ b/tools/bittool.cc @@ -31,10 +31,8 @@ int ListConfigPackets(int argc, char *argv[]) { return 1; } - auto in_bytes = absl::Span( - static_cast(in_file->data()), - in_file->size()); - auto reader = xc7series::BitstreamReader::InitWithBytes(in_bytes); + auto reader = xc7series::BitstreamReader::InitWithBytes( + in_file->as_bytes()); if (!reader) { std::cerr << "Input doesn't look like a bitstream" << std::endl; diff --git a/tools/gen_part_base_yaml.cc b/tools/gen_part_base_yaml.cc index 41cfef07..ca77995d 100644 --- a/tools/gen_part_base_yaml.cc +++ b/tools/gen_part_base_yaml.cc @@ -31,10 +31,8 @@ int main(int argc, char *argv[]) { return 1; } - auto in_bytes = absl::Span( - static_cast(in_file->data()), - in_file->size()); - auto reader = xc7series::BitstreamReader::InitWithBytes(in_bytes); + auto reader = xc7series::BitstreamReader::InitWithBytes( + in_file->as_bytes()); if (!reader) { std::cerr << "Input doesn't look like a bitstream" << std::endl;