diff options
| author | ruki <[email protected]> | 2018-12-29 21:49:51 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2018-12-29 21:49:51 +0800 |
| commit | 6ba45b97db448ba35711c0c06970436de3cad009 (patch) | |
| tree | f89a09db9a2903dc3a143199abf162493705741f /xmake/core/base/singleton.lua | |
| parent | 04aca8108118992c4962bff9862b34ff8d4384a1 (diff) | |
improve platform
Diffstat (limited to 'xmake/core/base/singleton.lua')
| -rw-r--r-- | xmake/core/base/singleton.lua | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/xmake/core/base/singleton.lua b/xmake/core/base/singleton.lua new file mode 100644 index 000000000..4579cf6fe --- /dev/null +++ b/xmake/core/base/singleton.lua @@ -0,0 +1,83 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed to the Apache Software Foundation (ASF) under one +-- or more contributor license agreements. See the NOTICE file +-- distributed with this work for additional information +-- regarding copyright ownership. The ASF licenses this file +-- to you 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. +-- +-- Copyright (C) 2015 - 2018, TBOOX Open Source Group. +-- +-- @author ruki +-- @file singleton.lua +-- + +-- define module +local singleton = singleton or {} + +-- get a singleton instance and create it if not exists +-- +-- e.g. +-- +-- local instance = singleton.get("key") +-- +-- function get_xxx() +-- +-- -- get instance +-- local instance, inited = singleton.get(get_xxx) +-- if inited then +-- return instance +-- end +-- +-- -- init instance +-- instance.xxx = 1 +-- return instance +-- end +-- +function singleton.get(key) + + -- get key + key = tostring(key) + + -- get all instances + local instances = singleton.instances() + + -- get singleton instance + local inited = true + local instance = instances[key] + if instance == nil then + + -- mark as not inited + inited = false + + -- init instance + instance = {} + + -- save this instance + instances[key] = instance + end + return instance, inited +end + +-- get all singleton instances +function singleton.instances() + local instances = singleton._INSTANCES + if not instances then + instances = {} + singleton._INSTANCES = instances + end + return instances +end + +-- return module: singleton +return singleton |
