github.com/sagernet/sing@v0.2.6/common/buf/pool.go (about)

     1  package buf
     2  
     3  func Get(size int) []byte {
     4  	if size == 0 {
     5  		return nil
     6  	}
     7  	return DefaultAllocator.Get(size)
     8  }
     9  
    10  func Put(buf []byte) error {
    11  	return DefaultAllocator.Put(buf)
    12  }
    13  
    14  func Make(size int) []byte {
    15  	if size == 0 {
    16  		return nil
    17  	}
    18  	var buffer []byte
    19  	switch {
    20  	case size <= 2:
    21  		buffer = make([]byte, 2)
    22  	case size <= 4:
    23  		buffer = make([]byte, 4)
    24  	case size <= 8:
    25  		buffer = make([]byte, 8)
    26  	case size <= 16:
    27  		buffer = make([]byte, 16)
    28  	case size <= 32:
    29  		buffer = make([]byte, 32)
    30  	case size <= 64:
    31  		buffer = make([]byte, 64)
    32  	case size <= 128:
    33  		buffer = make([]byte, 128)
    34  	case size <= 256:
    35  		buffer = make([]byte, 256)
    36  	case size <= 512:
    37  		buffer = make([]byte, 512)
    38  	case size <= 1024:
    39  		buffer = make([]byte, 1024)
    40  	case size <= 2048:
    41  		buffer = make([]byte, 2048)
    42  	case size <= 4096:
    43  		buffer = make([]byte, 4096)
    44  	case size <= 8192:
    45  		buffer = make([]byte, 8192)
    46  	case size <= 16384:
    47  		buffer = make([]byte, 16384)
    48  	case size <= 32768:
    49  		buffer = make([]byte, 32768)
    50  	case size <= 65535:
    51  		buffer = make([]byte, 65535)
    52  	default:
    53  		return make([]byte, size)
    54  	}
    55  	return buffer[:size]
    56  }