mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-04 21:30:49 +00:00
Provide a "None" value for convenience when using Optional<T>()
This implementation of NoneType/None does have some holes but I haven't found one that doesn't - open to improvement. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175696 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
06ab2c828a
commit
5c43245bf4
27
include/llvm/ADT/None.h
Normal file
27
include/llvm/ADT/None.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
//===-- None.h - Simple null value for implicit construction ------*- C++ -*-=//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is distributed under the University of Illinois Open Source
|
||||||
|
// License. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// This file provides None, an enumerant for use in implicit constructors
|
||||||
|
// of various (usually templated) types to make such construction more
|
||||||
|
// terse.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#ifndef LLVM_ADT_NONE_H
|
||||||
|
#define LLVM_ADT_NONE_H
|
||||||
|
|
||||||
|
namespace llvm {
|
||||||
|
/// \brief A simple null object to allow implicit construction of Optional<T>
|
||||||
|
/// and similar types without having to spell out the specialization's name.
|
||||||
|
enum NoneType {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -16,6 +16,7 @@
|
|||||||
#ifndef LLVM_ADT_OPTIONAL_H
|
#ifndef LLVM_ADT_OPTIONAL_H
|
||||||
#define LLVM_ADT_OPTIONAL_H
|
#define LLVM_ADT_OPTIONAL_H
|
||||||
|
|
||||||
|
#include "llvm/ADT/None.h"
|
||||||
#include "llvm/Support/Compiler.h"
|
#include "llvm/Support/Compiler.h"
|
||||||
#include "llvm/Support/AlignOf.h"
|
#include "llvm/Support/AlignOf.h"
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
@ -31,6 +32,7 @@ class Optional {
|
|||||||
AlignedCharArrayUnion<T> storage;
|
AlignedCharArrayUnion<T> storage;
|
||||||
bool hasVal;
|
bool hasVal;
|
||||||
public:
|
public:
|
||||||
|
Optional(NoneType) : hasVal(false) {}
|
||||||
explicit Optional() : hasVal(false) {}
|
explicit Optional() : hasVal(false) {}
|
||||||
Optional(const T &y) : hasVal(true) {
|
Optional(const T &y) : hasVal(true) {
|
||||||
new (storage.buffer) T(y);
|
new (storage.buffer) T(y);
|
||||||
|
@ -31,7 +31,7 @@ LockFileManager::readLockFile(StringRef LockFileName) {
|
|||||||
// to read, so we just return.
|
// to read, so we just return.
|
||||||
bool Exists = false;
|
bool Exists = false;
|
||||||
if (sys::fs::exists(LockFileName, Exists) || !Exists)
|
if (sys::fs::exists(LockFileName, Exists) || !Exists)
|
||||||
return Optional<std::pair<std::string, int> >();
|
return None;
|
||||||
|
|
||||||
// Read the owning host and PID out of the lock file. If it appears that the
|
// Read the owning host and PID out of the lock file. If it appears that the
|
||||||
// owning process is dead, the lock file is invalid.
|
// owning process is dead, the lock file is invalid.
|
||||||
@ -45,7 +45,7 @@ LockFileManager::readLockFile(StringRef LockFileName) {
|
|||||||
// Delete the lock file. It's invalid anyway.
|
// Delete the lock file. It's invalid anyway.
|
||||||
bool Existed;
|
bool Existed;
|
||||||
sys::fs::remove(LockFileName, Existed);
|
sys::fs::remove(LockFileName, Existed);
|
||||||
return Optional<std::pair<std::string, int> >();
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LockFileManager::processStillExecuting(StringRef Hostname, int PID) {
|
bool LockFileManager::processStillExecuting(StringRef Hostname, int PID) {
|
||||||
|
Loading…
Reference in New Issue
Block a user