49 lines
1.4 KiB
C++
49 lines
1.4 KiB
C++
//===-- runtime/character.cpp -----------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "character.h"
|
|
#include "terminator.h"
|
|
#include <algorithm>
|
|
#include <cstring>
|
|
|
|
namespace Fortran::runtime {
|
|
extern "C" {
|
|
|
|
void RTNAME(CharacterConcatenate)(Descriptor & /*temp*/,
|
|
const Descriptor & /*operand*/, const char * /*sourceFile*/,
|
|
int /*sourceLine*/) {
|
|
// TODO
|
|
}
|
|
|
|
void RTNAME(CharacterConcatenateScalar)(
|
|
Descriptor & /*temp*/, const char * /*from*/, std::size_t /*byteLength*/) {
|
|
// TODO
|
|
}
|
|
|
|
void RTNAME(CharacterAssign)(Descriptor & /*lhs*/, const Descriptor & /*rhs*/,
|
|
const char * /*sourceFile*/, int /*sourceLine*/) {
|
|
// TODO
|
|
}
|
|
|
|
std::size_t RTNAME(CharacterAppend)(char *lhs, std::size_t lhsLength,
|
|
std::size_t offset, const char *rhs, std::size_t rhsLength) {
|
|
if (auto n{std::min(lhsLength - offset, rhsLength)}) {
|
|
std::memcpy(lhs + offset, rhs, n);
|
|
offset += n;
|
|
}
|
|
return offset;
|
|
}
|
|
|
|
void RTNAME(CharacterPad)(char *lhs, std::size_t length, std::size_t offset) {
|
|
if (length > offset) {
|
|
std::memset(lhs + offset, ' ', length - offset);
|
|
}
|
|
}
|
|
}
|
|
} // namespace Fortran::runtime
|