diff flang/runtime/connection.cpp @ 173:0572611fdcc8 llvm10 llvm12

reorgnization done
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 11:55:54 +0900
parents
children 2e18cbf3894f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flang/runtime/connection.cpp	Mon May 25 11:55:54 2020 +0900
@@ -0,0 +1,32 @@
+//===-- runtime/connection.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 "connection.h"
+#include "environment.h"
+#include <algorithm>
+
+namespace Fortran::runtime::io {
+
+std::size_t ConnectionState::RemainingSpaceInRecord() const {
+  auto recl{recordLength.value_or(
+      executionEnvironment.listDirectedOutputLineLengthLimit)};
+  return positionInRecord >= recl ? 0 : recl - positionInRecord;
+}
+
+bool ConnectionState::IsAtEOF() const {
+  return endfileRecordNumber && currentRecordNumber >= *endfileRecordNumber;
+}
+
+void ConnectionState::HandleAbsolutePosition(std::int64_t n) {
+  positionInRecord = std::max(n, std::int64_t{0}) + leftTabLimit.value_or(0);
+}
+
+void ConnectionState::HandleRelativePosition(std::int64_t n) {
+  positionInRecord = std::max(leftTabLimit.value_or(0), positionInRecord + n);
+}
+} // namespace Fortran::runtime::io