diff options
| author | ruki <[email protected]> | 2017-12-06 22:27:42 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-12-08 14:10:23 +0800 |
| commit | abe87994168053e4f420a8b7ab286c65b546eaae (patch) | |
| tree | 2b245ac984055954a5407198edc26128ef173984 /xmake/core/base/object.lua | |
| parent | 330e8a895d4706bcc6b2247990fb72a70f54f377 (diff) | |
disable halfdelay for curses
Diffstat (limited to 'xmake/core/base/object.lua')
| -rw-r--r-- | xmake/core/base/object.lua | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/xmake/core/base/object.lua b/xmake/core/base/object.lua new file mode 100644 index 000000000..1922b0b4d --- /dev/null +++ b/xmake/core/base/object.lua @@ -0,0 +1,109 @@ +--!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 - 2017, TBOOX Open Source Group. +-- +-- @author ruki +-- @file object.lua +-- + +-- define module: object +local object = object or {} + +-- taken from 'std' library: http://luaforge.net/projects/stdlib/ +-- and http://lua-cui.sourceforge.net/ +-- +-- create an object/class: +-- > object/class = parent {value, ...; field = value ...} +-- > An object's metatable is itself. +-- > In the initialiser, unnamed values are assigned to the fields +-- > given by _init (assuming the default _clone). +-- > Private fields and methods start with "_" +-- > +-- +-- Access an object field: object.field +-- > Call an object method: object:method (...) +-- > Call a class method: class.method (self, ...) +-- > +-- > Add a field: object.field = x +-- > Add a method: function object:method (...) ... end +-- + +-- permute some indices of a table +local function permute (p, t) + local u = {} + for i, v in pairs (t) do + if p[i] ~= nil then + u[p[i]] = v + else + u[i] = v + end + end + return u +end + +-- make a shallow copy of a table, including any +local function clone (t) + local u = setmetatable ({}, getmetatable (t)) + for i, v in pairs (t) do + u[i] = v + end + return u +end + +-- merge two tables +-- +-- If there are duplicate fields, u's will be used. The metatable of +-- the returned table is that of t +-- +local function merge (t, u) + local r = clone (t) + for i, v in pairs (u) do + r[i] = v + end + return r +end + +-- root object +-- +-- List of fields to be initialised by the +-- constructor: assuming the default _clone, the +-- numbered values in an object constructor are +-- assigned to the fields given in _init +-- +local object = { _init = {} } +setmetatable (object, object) + +-- object constructor +-- +-- @param initial values for fields in +-- +-- @return new object +-- +function object:_clone (values) + local object = merge(self, permute(self._init, values or {})) + return setmetatable (object, object) +end + +-- local x = object {} +function object.__call (...) + return (...)._clone (...) +end + +-- return module: object +return object |
