Open Chinese Convert  1.0.3
A project for conversion between Traditional and Simplified Chinese
Optional.hpp
00001 /*
00002  * Open Chinese Convert
00003  *
00004  * Copyright 2010-2014 BYVoid <byvoid@byvoid.com>
00005  *
00006  * Licensed under the Apache License, Version 2.0 (the "License");
00007  * you may not use this file except in compliance with the License.
00008  * You may obtain a copy of the License at
00009  *
00010  *      http://www.apache.org/licenses/LICENSE-2.0
00011  *
00012  * Unless required by applicable law or agreed to in writing, software
00013  * distributed under the License is distributed on an "AS IS" BASIS,
00014  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00015  * See the License for the specific language governing permissions and
00016  * limitations under the License.
00017  */
00018 
00019 #pragma once
00020 
00021 namespace opencc {
00026 template <typename T> class Optional {
00027 public:
00031   Optional(T actual) : isNull(false), data(actual) {}
00032 
00036   bool IsNull() const { return isNull; }
00037 
00041   const T& Get() const { return data; }
00042 
00046   static Optional<T> Null() { return Optional(); }
00047 
00048 private:
00049   Optional() : isNull(true) {}
00050 
00051   bool isNull;
00052   T data;
00053 };
00054 
00060 template <typename T> class Optional<T*> {
00061 private:
00062   Optional() : data(nullptr) {}
00063 
00064   typedef T* TPtr;
00065   TPtr data;
00066 
00067 public:
00068   Optional(TPtr actual) : data(actual) {}
00069 
00070   bool IsNull() const { return data == nullptr; }
00071 
00072   const TPtr& Get() const { return data; }
00073 
00074   static Optional<TPtr> Null() { return Optional(); }
00075 };
00076 }
 All Classes Functions