コード例 #1
0
 public void *Remove()
 {
     Ion.assert(_top != _begin);
     _top--;
     count--;
     return(*_top);
 }
コード例 #2
0
        void map_put_uint64_from_uint64(ulong key, ulong val)
        {
            Ion.assert(key != 0);
            if (val == 0)
            {
                return;
            }

            if (2 * len >= cap)
            {
                map_grow(2 * cap);
            }

            Ion.assert(2 * len < cap);
            Ion.assert(Ion.IS_POW2(cap));


            for (var i = key; ; i++)
            {
                i &= cap - 1;
                if (keys[i] == 0)
                {
                    len++;
                    keys[i] = key;
                    vals[i] = val;
                    return;
                }

                if (keys[i] == key)
                {
                    vals[i] = val;
                    return;
                }
            }
        }
コード例 #3
0
        public static PtrBuffer *Create(int capacity = START_CAPACITY, int multiplier = MULTIPLIER)
        {
            Ion.assert(multiplier >= MULTIPLIER);
            Ion.assert(capacity > 0);
            var b = (PtrBuffer *)Ion.xmalloc(sizeof(PtrBuffer));

            b->_capacity     = capacity;
            b->_multiplier   = multiplier;
            b->count         = 0;
            b->buf_byte_size = capacity * Ion.PTR_SIZE;
            b->_begin        = (void **)Ion.xmalloc(b->buf_byte_size);
            b->_top          = b->_begin;
            b->_end          = b->_begin + b->buf_byte_size;
            return(b);
        }
コード例 #4
0
        public static Buffer <T> Create(int capacity = START_CAPACITY, int multiplier = MULTIPLIER)
        {
            Ion.assert(capacity >= START_CAPACITY);
            Ion.assert(multiplier > 1);
            var b = new Buffer <T>
            {
                item_size   = sizeof(T),
                _capacity   = capacity,
                _multiplier = multiplier,
                count       = 0
            };

            b.buffer_size = b._capacity * b.item_size;
            b._begin      = (T *)Ion.xmalloc(b.buffer_size);
            b._top        = b._begin;
            return(b);
        }
コード例 #5
0
        ulong map_get_uint64_from_uint64(ulong key)
        {
            if (len == 0)
            {
                return(0);
            }

            Ion.assert(Ion.IS_POW2(cap));
            Ion.assert(len < cap);

            for (var i = key; ; i++)
            {
                i &= cap - 1;
                if (keys[i] == key)
                {
                    return(vals[i]);
                }
                if (keys[i] == 0)
                {
                    return(0);
                }
            }
        }