blob: a77f2e73f71f943f093c0233383755f0cf4ba753 [file] [log] [blame]
/*
* Copyright (C) 2017-2020 The Project X-Ray Authors.
*
* Use of this source code is governed by a ISC-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/ISC
*
* SPDX-License-Identifier: ISC
*/
#include <prjxray/xilinx/xc7series/configuration_column.h>
namespace prjxray {
namespace xilinx {
namespace xc7series {
bool ConfigurationColumn::IsValidFrameAddress(FrameAddress address) const {
return address.minor() < frame_count_;
}
absl::optional<FrameAddress> ConfigurationColumn::GetNextFrameAddress(
FrameAddress address) const {
if (!IsValidFrameAddress(address))
return {};
if (static_cast<unsigned int>(address.minor() + 1) < frame_count_) {
return address + 1;
}
// Next address is not in this column.
return {};
}
} // namespace xc7series
} // namespace xilinx
} // namespace prjxray
namespace xc7series = prjxray::xilinx::xc7series;
namespace YAML {
Node convert<xc7series::ConfigurationColumn>::encode(
const xc7series::ConfigurationColumn& rhs) {
Node node;
node.SetTag("xilinx/xc7series/configuration_column");
node["frame_count"] = rhs.frame_count_;
return node;
}
bool convert<xc7series::ConfigurationColumn>::decode(
const Node& node,
xc7series::ConfigurationColumn& lhs) {
if (!node.Tag().empty() &&
node.Tag() != "xilinx/xc7series/configuration_column") {
return false;
}
lhs.frame_count_ = node["frame_count"].as<unsigned int>();
return true;
}
} // namespace YAML