diff options
author | Dominick Allen <djallen@librehumanitas.org> | 2024-09-22 12:41:28 -0500 |
---|---|---|
committer | Dominick Allen <djallen@librehumanitas.org> | 2024-09-22 12:41:28 -0500 |
commit | 7da829d48f9059c83ab9cada2c850621e8bbd3f3 (patch) | |
tree | 314e7a5b645e910d4997e3bee980bd2024f3087d /source/memory.cpp | |
parent | bf81e34921e3e30b05313efbcf5c9fa839cb7c05 (diff) |
Basics of library.
Diffstat (limited to 'source/memory.cpp')
-rw-r--r-- | source/memory.cpp | 127 |
1 files changed, 0 insertions, 127 deletions
diff --git a/source/memory.cpp b/source/memory.cpp deleted file mode 100644 index 9f5d358..0000000 --- a/source/memory.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/* - * ExtLib - * Copyright 2024 Dominick Allen - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "memory.hpp" - -#include <cstdint> - -namespace fud { - -FudStatus copyMem(void* destination, size_t destination_size, const void* source, size_t count) -{ - if (anyAreNull(destination, source)) { - return FudStatus::NullPointer; - } - - if (destination_size < count) { - return FudStatus::InvalidInput; - } - - auto* destPtr = static_cast<uint8_t*>(destination); - const auto* sourcePtr = static_cast<const uint8_t*>(source); - for (decltype(destination_size) idx = 0; idx < count; ++idx) { - destPtr[idx] = sourcePtr[idx]; - } - - return FudStatus::Success; -} - -FudStatus compareMem(const void* lhs, size_t destination_size, const void* rhs, size_t count, int* difference) -{ - if (anyAreNull(lhs, rhs, difference)) { - return FudStatus::NullPointer; - } - - if (destination_size < count) { - return FudStatus::InvalidInput; - } - - int localDifference = 0; - // NOLINTBEGIN(readability-magic-numbers) - for (decltype(destination_size) idx = 0; idx < count; idx++) { - localDifference = static_cast<const uint8_t*>(lhs)[idx] - static_cast<const uint8_t*>(rhs)[idx]; - if (localDifference != 0) { - *difference = localDifference; - return FudStatus::Success; - } - } - *difference = localDifference; - - return FudStatus::Success; -} - -Result<int, FudStatus> compareMem(const void* lhs, size_t destination_size, const void* rhs, size_t count) -{ - int difference = 0; - auto status = compareMem(lhs, destination_size, rhs, count, &difference); - if (status != FudStatus::Success) - { - return Result<int, FudStatus>::error(status); - } - - return Result<int, FudStatus>::okay(difference); -} - -FudStatus setMemory(void* data, size_t dataSize, uint8_t pattern, size_t count) -{ - if (data == nullptr) - { - return FudStatus::NullPointer; - } - - if (count > dataSize) - { - return FudStatus::InvalidInput; - } - - for (size_t idx = 0; idx < count; ++idx) - { - static_cast<uint8_t*>(data)[idx] = pattern; - } - - return FudStatus::Success; -} - -FudStatus setMemory( - void* data, - size_t collectionCount, - size_t eltOffset, - size_t eltSize, - uint8_t pattern, - size_t eltCount) -{ - if (eltOffset >= collectionCount) - { - return FudStatus::InvalidInput; - } - - if (eltOffset + eltCount > collectionCount) - { - return FudStatus::InvalidInput; - } - - auto dataSize = collectionCount * eltSize; - auto byteOffset = eltOffset * eltSize; - auto byteCount = eltCount * eltSize; - - auto remainingSize = dataSize - byteOffset; - - auto* offsetData = static_cast<uint8_t*>(data) + byteOffset; - return setMemory(offsetData, remainingSize, pattern, byteCount); -} - -} // namespace fud |