// GoToSocial // Copyright (C) GoToSocial Authors admin@gotosocial.org // SPDX-License-Identifier: AGPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . package ap import ( "net/url" "sync" "github.com/superseriousbusiness/activity/streams/vocab" ) const mapmax = 256 // mapPool is a memory pool // of maps for JSON decoding. var mapPool sync.Pool // getMap acquires a map from memory pool. func getMap() map[string]any { v := mapPool.Get() if v == nil { // preallocate map of max-size. m := make(map[string]any, mapmax) v = m } return v.(map[string]any) //nolint } // putMap clears and places map back in pool. func putMap(m map[string]any) { if len(m) > mapmax { // drop maps beyond // our maximum size. return } clear(m) mapPool.Put(m) } // _TypeOrIRI wraps a vocab.Type to implement TypeOrIRI. type _TypeOrIRI struct { vocab.Type } func (t *_TypeOrIRI) GetType() vocab.Type { return t.Type } func (t *_TypeOrIRI) GetIRI() *url.URL { return nil } func (t *_TypeOrIRI) IsIRI() bool { return false } func (t *_TypeOrIRI) SetIRI(*url.URL) {}