github.com/ontio/ontology@v1.14.4/vm/neovm/types/array_value.go (about) 1 /* 2 * Copyright (C) 2018 The ontology Authors 3 * This file is part of The ontology library. 4 * 5 * The ontology is free software: you can redistribute it and/or modify 6 * it under the terms of the GNU Lesser General Public License as published by 7 * the Free Software Foundation, either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * The ontology is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public License 16 * along with The ontology. If not, see <http://www.gnu.org/licenses/>. 17 */ 18 19 package types 20 21 import ( 22 "github.com/ontio/ontology/vm/neovm/constants" 23 "github.com/ontio/ontology/vm/neovm/errors" 24 ) 25 26 type ArrayValue struct { 27 Data []VmValue 28 } 29 30 const initArraySize = 16 31 32 func NewArrayValue() *ArrayValue { 33 return &ArrayValue{Data: make([]VmValue, 0, initArraySize)} 34 } 35 36 func (self *ArrayValue) Append(item VmValue) error { 37 if len(self.Data) >= constants.MAX_ARRAY_SIZE { 38 return errors.ERR_OVER_MAX_ARRAY_SIZE 39 } 40 self.Data = append(self.Data, item) 41 return nil 42 } 43 44 func (self *ArrayValue) Len() int64 { 45 return int64(len(self.Data)) 46 } 47 48 func (self *ArrayValue) RemoveAt(index int64) error { 49 if index < 0 || index >= self.Len() { 50 return errors.ERR_INDEX_OUT_OF_BOUND 51 } 52 self.Data = append(self.Data[:index], self.Data[index+1:]...) 53 return nil 54 }