diff options
author | Zach Reizner <zachr@google.com> | 2015-10-28 19:08:45 -0700 |
---|---|---|
committer | Zach Reizner <zachr@google.com> | 2015-10-29 09:59:39 -0700 |
commit | ff30b52303cdbeb9cbfb054e2a12da1135ea49c9 (patch) | |
tree | d6b9dbc08f43ae2c4814c23c653e632b4180bae1 /autofd.h | |
parent | 7cd2643b0de900e00e5b0cc0bd6dbbc649840b02 (diff) |
drm_hwcomposer: polish for old DRM wrapper code
- deleted private copy constructors
- replace delete with unique_ptr
- use in-class assignment
- remove default constructors/destructors when no longer needed
- remove most iterators used in for loops
- move UniqueFd to its own header so drmresources can use it
Change-Id: Ib20cc0949cf4d381a58548b8156c5cb368ca3efe
Diffstat (limited to 'autofd.h')
-rw-r--r-- | autofd.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/autofd.h b/autofd.h new file mode 100644 index 0000000..0c4bd66 --- /dev/null +++ b/autofd.h @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * 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 <unistd.h> + +namespace android { + +class UniqueFd { + public: + UniqueFd() = default; + UniqueFd(int fd) : fd_(fd) { + } + UniqueFd(UniqueFd &&rhs) { + fd_ = rhs.fd_; + rhs.fd_ = -1; + } + + UniqueFd &operator=(UniqueFd &&rhs) { + Set(rhs.Release()); + return *this; + } + + ~UniqueFd() { + if (fd_ >= 0) + close(fd_); + } + + int Release() { + int old_fd = fd_; + fd_ = -1; + return old_fd; + } + + int Set(int fd) { + if (fd_ >= 0) + close(fd_); + fd_ = fd; + return fd_; + } + + void Close() { + if (fd_ >= 0) + close(fd_); + fd_ = -1; + } + + int get() const { + return fd_; + } + + private: + int fd_ = -1; +}; + +struct OutputFd { + OutputFd() = default; + OutputFd(int *fd) : fd_(fd) { + } + OutputFd(OutputFd &&rhs) { + fd_ = rhs.fd_; + rhs.fd_ = NULL; + } + + OutputFd &operator=(OutputFd &&rhs) { + fd_ = rhs.fd_; + rhs.fd_ = NULL; + return *this; + } + + int Set(int fd) { + if (*fd_ >= 0) + close(*fd_); + *fd_ = fd; + return fd; + } + + int get() { + return *fd_; + } + + private: + int *fd_ = NULL; +}; +} |