pw_kvs: de-inline FlashPartition constructor

This is so that we can safely use PW_DCHECK

Change-Id: Id29b7ebfbef012ee892255d9eac735044a49f311
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/21041
Commit-Queue: Paul Mathieu <paulmathieu@google.com>
Reviewed-by: David Rogers <davidrogers@google.com>
diff --git a/pw_kvs/flash_memory.cc b/pw_kvs/flash_memory.cc
index ceb2d3e..1f663c4 100644
--- a/pw_kvs/flash_memory.cc
+++ b/pw_kvs/flash_memory.cc
@@ -41,6 +41,28 @@
   return result;
 }
 
+FlashPartition::FlashPartition(
+    FlashMemory* flash,
+    uint32_t start_sector_index,
+    uint32_t sector_count,
+    uint32_t alignment_bytes,  // Defaults to flash alignment
+    PartitionPermission permission)
+
+    : flash_(*flash),
+      start_sector_index_(start_sector_index),
+      sector_count_(sector_count),
+      alignment_bytes_(
+          alignment_bytes == 0
+              ? flash_.alignment_bytes()
+              : std::max(alignment_bytes, uint32_t(flash_.alignment_bytes()))),
+      permission_(permission) {
+  uint32_t misalignment = (alignment_bytes_ % flash_.alignment_bytes());
+  PW_DCHECK_UINT_EQ(misalignment,
+                    0,
+                    "Flash partition alignmentmust be a multiple of the flash "
+                    "memory alignment");
+}
+
 Status FlashPartition::Erase(Address address, size_t num_sectors) {
   if (permission_ == PartitionPermission::kReadOnly) {
     return Status::PermissionDenied();