diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2023-02-12 16:17:02 -0700 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2023-02-12 16:17:02 -0700 |
commit | cfcc753dc8906817e15b1b7c36b4dc12462d12e4 (patch) | |
tree | f5d2aa0caaa4cb336017ba7595c3425f4aa00bfc /lib/btrfs/btrfsitem/items_gen.go | |
parent | 29b6b9f997913f13a0bff8bb1278a61302413615 (diff) | |
parent | f76faa4b8debd9c94751a03dd65e46c80a340a82 (diff) |
Merge branch 'lukeshu/fast'
Diffstat (limited to 'lib/btrfs/btrfsitem/items_gen.go')
-rw-r--r-- | lib/btrfs/btrfsitem/items_gen.go | 399 |
1 files changed, 341 insertions, 58 deletions
diff --git a/lib/btrfs/btrfsitem/items_gen.go b/lib/btrfs/btrfsitem/items_gen.go index 9daef81..31d2a76 100644 --- a/lib/btrfs/btrfsitem/items_gen.go +++ b/lib/btrfs/btrfsitem/items_gen.go @@ -5,6 +5,8 @@ package btrfsitem import ( "reflect" + "git.lukeshu.com/go/typedsync" + "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsprim" ) @@ -43,64 +45,345 @@ const ( XATTR_ITEM_KEY = btrfsprim.XATTR_ITEM_KEY ) +var ( + blockGroupType = reflect.TypeOf(BlockGroup{}) + chunkType = reflect.TypeOf(Chunk{}) + devType = reflect.TypeOf(Dev{}) + devExtentType = reflect.TypeOf(DevExtent{}) + devStatsType = reflect.TypeOf(DevStats{}) + dirEntryType = reflect.TypeOf(DirEntry{}) + emptyType = reflect.TypeOf(Empty{}) + extentType = reflect.TypeOf(Extent{}) + extentCSumType = reflect.TypeOf(ExtentCSum{}) + extentDataRefType = reflect.TypeOf(ExtentDataRef{}) + fileExtentType = reflect.TypeOf(FileExtent{}) + freeSpaceBitmapType = reflect.TypeOf(FreeSpaceBitmap{}) + freeSpaceHeaderType = reflect.TypeOf(FreeSpaceHeader{}) + freeSpaceInfoType = reflect.TypeOf(FreeSpaceInfo{}) + inodeType = reflect.TypeOf(Inode{}) + inodeRefsType = reflect.TypeOf(InodeRefs{}) + metadataType = reflect.TypeOf(Metadata{}) + qGroupInfoType = reflect.TypeOf(QGroupInfo{}) + qGroupLimitType = reflect.TypeOf(QGroupLimit{}) + qGroupStatusType = reflect.TypeOf(QGroupStatus{}) + rootType = reflect.TypeOf(Root{}) + rootRefType = reflect.TypeOf(RootRef{}) + sharedDataRefType = reflect.TypeOf(SharedDataRef{}) + uuidMapType = reflect.TypeOf(UUIDMap{}) +) + +// keytype2gotype is used by UnmarshalItem. var keytype2gotype = map[Type]reflect.Type{ - BLOCK_GROUP_ITEM_KEY: reflect.TypeOf(BlockGroup{}), - CHUNK_ITEM_KEY: reflect.TypeOf(Chunk{}), - DEV_EXTENT_KEY: reflect.TypeOf(DevExtent{}), - DEV_ITEM_KEY: reflect.TypeOf(Dev{}), - DIR_INDEX_KEY: reflect.TypeOf(DirEntry{}), - DIR_ITEM_KEY: reflect.TypeOf(DirEntry{}), - EXTENT_CSUM_KEY: reflect.TypeOf(ExtentCSum{}), - EXTENT_DATA_KEY: reflect.TypeOf(FileExtent{}), - EXTENT_DATA_REF_KEY: reflect.TypeOf(ExtentDataRef{}), - EXTENT_ITEM_KEY: reflect.TypeOf(Extent{}), - FREE_SPACE_BITMAP_KEY: reflect.TypeOf(FreeSpaceBitmap{}), - FREE_SPACE_EXTENT_KEY: reflect.TypeOf(Empty{}), - FREE_SPACE_INFO_KEY: reflect.TypeOf(FreeSpaceInfo{}), - INODE_ITEM_KEY: reflect.TypeOf(Inode{}), - INODE_REF_KEY: reflect.TypeOf(InodeRefs{}), - METADATA_ITEM_KEY: reflect.TypeOf(Metadata{}), - ORPHAN_ITEM_KEY: reflect.TypeOf(Empty{}), - PERSISTENT_ITEM_KEY: reflect.TypeOf(DevStats{}), - QGROUP_INFO_KEY: reflect.TypeOf(QGroupInfo{}), - QGROUP_LIMIT_KEY: reflect.TypeOf(QGroupLimit{}), - QGROUP_RELATION_KEY: reflect.TypeOf(Empty{}), - QGROUP_STATUS_KEY: reflect.TypeOf(QGroupStatus{}), - ROOT_BACKREF_KEY: reflect.TypeOf(RootRef{}), - ROOT_ITEM_KEY: reflect.TypeOf(Root{}), - ROOT_REF_KEY: reflect.TypeOf(RootRef{}), - SHARED_BLOCK_REF_KEY: reflect.TypeOf(Empty{}), - SHARED_DATA_REF_KEY: reflect.TypeOf(SharedDataRef{}), - TREE_BLOCK_REF_KEY: reflect.TypeOf(Empty{}), - UUID_RECEIVED_SUBVOL_KEY: reflect.TypeOf(UUIDMap{}), - UUID_SUBVOL_KEY: reflect.TypeOf(UUIDMap{}), - XATTR_ITEM_KEY: reflect.TypeOf(DirEntry{}), + BLOCK_GROUP_ITEM_KEY: blockGroupType, + CHUNK_ITEM_KEY: chunkType, + DEV_EXTENT_KEY: devExtentType, + DEV_ITEM_KEY: devType, + DIR_INDEX_KEY: dirEntryType, + DIR_ITEM_KEY: dirEntryType, + EXTENT_CSUM_KEY: extentCSumType, + EXTENT_DATA_KEY: fileExtentType, + EXTENT_DATA_REF_KEY: extentDataRefType, + EXTENT_ITEM_KEY: extentType, + FREE_SPACE_BITMAP_KEY: freeSpaceBitmapType, + FREE_SPACE_EXTENT_KEY: emptyType, + FREE_SPACE_INFO_KEY: freeSpaceInfoType, + INODE_ITEM_KEY: inodeType, + INODE_REF_KEY: inodeRefsType, + METADATA_ITEM_KEY: metadataType, + ORPHAN_ITEM_KEY: emptyType, + PERSISTENT_ITEM_KEY: devStatsType, + QGROUP_INFO_KEY: qGroupInfoType, + QGROUP_LIMIT_KEY: qGroupLimitType, + QGROUP_RELATION_KEY: emptyType, + QGROUP_STATUS_KEY: qGroupStatusType, + ROOT_BACKREF_KEY: rootRefType, + ROOT_ITEM_KEY: rootType, + ROOT_REF_KEY: rootRefType, + SHARED_BLOCK_REF_KEY: emptyType, + SHARED_DATA_REF_KEY: sharedDataRefType, + TREE_BLOCK_REF_KEY: emptyType, + UUID_RECEIVED_SUBVOL_KEY: uuidMapType, + UUID_SUBVOL_KEY: uuidMapType, + XATTR_ITEM_KEY: dirEntryType, } + +// untypedObjID2gotype is used by UnmarshalItem. var untypedObjID2gotype = map[btrfsprim.ObjID]reflect.Type{ - btrfsprim.FREE_SPACE_OBJECTID: reflect.TypeOf(FreeSpaceHeader{}), -} - -func (BlockGroup) isItem() {} -func (Chunk) isItem() {} -func (Dev) isItem() {} -func (DevExtent) isItem() {} -func (DevStats) isItem() {} -func (DirEntry) isItem() {} -func (Empty) isItem() {} -func (Extent) isItem() {} -func (ExtentCSum) isItem() {} -func (ExtentDataRef) isItem() {} -func (FileExtent) isItem() {} -func (FreeSpaceBitmap) isItem() {} -func (FreeSpaceHeader) isItem() {} -func (FreeSpaceInfo) isItem() {} -func (Inode) isItem() {} -func (InodeRefs) isItem() {} -func (Metadata) isItem() {} -func (QGroupInfo) isItem() {} -func (QGroupLimit) isItem() {} -func (QGroupStatus) isItem() {} -func (Root) isItem() {} -func (RootRef) isItem() {} -func (SharedDataRef) isItem() {} -func (UUIDMap) isItem() {} + btrfsprim.FREE_SPACE_OBJECTID: freeSpaceHeaderType, +} + +// Pools. +var ( + blockGroupPool = typedsync.Pool[Item]{New: func() Item { return new(BlockGroup) }} + chunkPool = typedsync.Pool[Item]{New: func() Item { return new(Chunk) }} + devPool = typedsync.Pool[Item]{New: func() Item { return new(Dev) }} + devExtentPool = typedsync.Pool[Item]{New: func() Item { return new(DevExtent) }} + devStatsPool = typedsync.Pool[Item]{New: func() Item { return new(DevStats) }} + dirEntryPool = typedsync.Pool[Item]{New: func() Item { return new(DirEntry) }} + emptyPool = typedsync.Pool[Item]{New: func() Item { return new(Empty) }} + extentPool = typedsync.Pool[Item]{New: func() Item { return new(Extent) }} + extentCSumPool = typedsync.Pool[Item]{New: func() Item { return new(ExtentCSum) }} + extentDataRefPool = typedsync.Pool[Item]{New: func() Item { return new(ExtentDataRef) }} + fileExtentPool = typedsync.Pool[Item]{New: func() Item { return new(FileExtent) }} + freeSpaceBitmapPool = typedsync.Pool[Item]{New: func() Item { return new(FreeSpaceBitmap) }} + freeSpaceHeaderPool = typedsync.Pool[Item]{New: func() Item { return new(FreeSpaceHeader) }} + freeSpaceInfoPool = typedsync.Pool[Item]{New: func() Item { return new(FreeSpaceInfo) }} + inodePool = typedsync.Pool[Item]{New: func() Item { return new(Inode) }} + inodeRefsPool = typedsync.Pool[Item]{New: func() Item { return new(InodeRefs) }} + metadataPool = typedsync.Pool[Item]{New: func() Item { return new(Metadata) }} + qGroupInfoPool = typedsync.Pool[Item]{New: func() Item { return new(QGroupInfo) }} + qGroupLimitPool = typedsync.Pool[Item]{New: func() Item { return new(QGroupLimit) }} + qGroupStatusPool = typedsync.Pool[Item]{New: func() Item { return new(QGroupStatus) }} + rootPool = typedsync.Pool[Item]{New: func() Item { return new(Root) }} + rootRefPool = typedsync.Pool[Item]{New: func() Item { return new(RootRef) }} + sharedDataRefPool = typedsync.Pool[Item]{New: func() Item { return new(SharedDataRef) }} + uuidMapPool = typedsync.Pool[Item]{New: func() Item { return new(UUIDMap) }} +) + +// gotype2pool is used by UnmarshalItem. +var gotype2pool = map[reflect.Type]*typedsync.Pool[Item]{ + blockGroupType: &blockGroupPool, + chunkType: &chunkPool, + devType: &devPool, + devExtentType: &devExtentPool, + devStatsType: &devStatsPool, + dirEntryType: &dirEntryPool, + emptyType: &emptyPool, + extentType: &extentPool, + extentCSumType: &extentCSumPool, + extentDataRefType: &extentDataRefPool, + fileExtentType: &fileExtentPool, + freeSpaceBitmapType: &freeSpaceBitmapPool, + freeSpaceHeaderType: &freeSpaceHeaderPool, + freeSpaceInfoType: &freeSpaceInfoPool, + inodeType: &inodePool, + inodeRefsType: &inodeRefsPool, + metadataType: &metadataPool, + qGroupInfoType: &qGroupInfoPool, + qGroupLimitType: &qGroupLimitPool, + qGroupStatusType: &qGroupStatusPool, + rootType: &rootPool, + rootRefType: &rootRefPool, + sharedDataRefType: &sharedDataRefPool, + uuidMapType: &uuidMapPool, +} + +// isItem implements Item. +func (*BlockGroup) isItem() {} +func (*Chunk) isItem() {} +func (*Dev) isItem() {} +func (*DevExtent) isItem() {} +func (*DevStats) isItem() {} +func (*DirEntry) isItem() {} +func (*Empty) isItem() {} +func (*Extent) isItem() {} +func (*ExtentCSum) isItem() {} +func (*ExtentDataRef) isItem() {} +func (*FileExtent) isItem() {} +func (*FreeSpaceBitmap) isItem() {} +func (*FreeSpaceHeader) isItem() {} +func (*FreeSpaceInfo) isItem() {} +func (*Inode) isItem() {} +func (*InodeRefs) isItem() {} +func (*Metadata) isItem() {} +func (*QGroupInfo) isItem() {} +func (*QGroupLimit) isItem() {} +func (*QGroupStatus) isItem() {} +func (*Root) isItem() {} +func (*RootRef) isItem() {} +func (*SharedDataRef) isItem() {} +func (*UUIDMap) isItem() {} + +// Free implements Item. +func (o *BlockGroup) Free() { *o = BlockGroup{}; blockGroupPool.Put(o) } +func (o *Dev) Free() { *o = Dev{}; devPool.Put(o) } +func (o *DevExtent) Free() { *o = DevExtent{}; devExtentPool.Put(o) } +func (o *DevStats) Free() { *o = DevStats{}; devStatsPool.Put(o) } +func (o *Empty) Free() { *o = Empty{}; emptyPool.Put(o) } +func (o *ExtentCSum) Free() { *o = ExtentCSum{}; extentCSumPool.Put(o) } +func (o *ExtentDataRef) Free() { *o = ExtentDataRef{}; extentDataRefPool.Put(o) } +func (o *FreeSpaceHeader) Free() { *o = FreeSpaceHeader{}; freeSpaceHeaderPool.Put(o) } +func (o *FreeSpaceInfo) Free() { *o = FreeSpaceInfo{}; freeSpaceInfoPool.Put(o) } +func (o *Inode) Free() { *o = Inode{}; inodePool.Put(o) } +func (o *QGroupInfo) Free() { *o = QGroupInfo{}; qGroupInfoPool.Put(o) } +func (o *QGroupLimit) Free() { *o = QGroupLimit{}; qGroupLimitPool.Put(o) } +func (o *QGroupStatus) Free() { *o = QGroupStatus{}; qGroupStatusPool.Put(o) } +func (o *Root) Free() { *o = Root{}; rootPool.Put(o) } +func (o *SharedDataRef) Free() { *o = SharedDataRef{}; sharedDataRefPool.Put(o) } +func (o *UUIDMap) Free() { *o = UUIDMap{}; uuidMapPool.Put(o) } + +// Clone is a handy method. +func (o BlockGroup) Clone() BlockGroup { return o } +func (o Dev) Clone() Dev { return o } +func (o DevExtent) Clone() DevExtent { return o } +func (o DevStats) Clone() DevStats { return o } +func (o Empty) Clone() Empty { return o } +func (o ExtentCSum) Clone() ExtentCSum { return o } +func (o ExtentDataRef) Clone() ExtentDataRef { return o } +func (o FreeSpaceHeader) Clone() FreeSpaceHeader { return o } +func (o FreeSpaceInfo) Clone() FreeSpaceInfo { return o } +func (o Inode) Clone() Inode { return o } +func (o QGroupInfo) Clone() QGroupInfo { return o } +func (o QGroupLimit) Clone() QGroupLimit { return o } +func (o QGroupStatus) Clone() QGroupStatus { return o } +func (o Root) Clone() Root { return o } +func (o SharedDataRef) Clone() SharedDataRef { return o } +func (o UUIDMap) Clone() UUIDMap { return o } + +// CloneItem implements Item. +func (o *BlockGroup) CloneItem() Item { + ret, _ := blockGroupPool.Get() + *(ret.(*BlockGroup)) = o.Clone() + return ret +} +func (o *Chunk) CloneItem() Item { ret, _ := chunkPool.Get(); *(ret.(*Chunk)) = o.Clone(); return ret } +func (o *Dev) CloneItem() Item { ret, _ := devPool.Get(); *(ret.(*Dev)) = o.Clone(); return ret } +func (o *DevExtent) CloneItem() Item { + ret, _ := devExtentPool.Get() + *(ret.(*DevExtent)) = o.Clone() + return ret +} +func (o *DevStats) CloneItem() Item { + ret, _ := devStatsPool.Get() + *(ret.(*DevStats)) = o.Clone() + return ret +} +func (o *DirEntry) CloneItem() Item { + ret, _ := dirEntryPool.Get() + *(ret.(*DirEntry)) = o.Clone() + return ret +} +func (o *Empty) CloneItem() Item { ret, _ := emptyPool.Get(); *(ret.(*Empty)) = o.Clone(); return ret } +func (o *Extent) CloneItem() Item { + ret, _ := extentPool.Get() + *(ret.(*Extent)) = o.Clone() + return ret +} +func (o *ExtentCSum) CloneItem() Item { + ret, _ := extentCSumPool.Get() + *(ret.(*ExtentCSum)) = o.Clone() + return ret +} +func (o *ExtentDataRef) CloneItem() Item { + ret, _ := extentDataRefPool.Get() + *(ret.(*ExtentDataRef)) = o.Clone() + return ret +} +func (o *FileExtent) CloneItem() Item { + ret, _ := fileExtentPool.Get() + *(ret.(*FileExtent)) = o.Clone() + return ret +} +func (o *FreeSpaceBitmap) CloneItem() Item { + ret, _ := freeSpaceBitmapPool.Get() + *(ret.(*FreeSpaceBitmap)) = o.Clone() + return ret +} +func (o *FreeSpaceHeader) CloneItem() Item { + ret, _ := freeSpaceHeaderPool.Get() + *(ret.(*FreeSpaceHeader)) = o.Clone() + return ret +} +func (o *FreeSpaceInfo) CloneItem() Item { + ret, _ := freeSpaceInfoPool.Get() + *(ret.(*FreeSpaceInfo)) = o.Clone() + return ret +} +func (o *Inode) CloneItem() Item { ret, _ := inodePool.Get(); *(ret.(*Inode)) = o.Clone(); return ret } +func (o *InodeRefs) CloneItem() Item { + ret, _ := inodeRefsPool.Get() + *(ret.(*InodeRefs)) = o.Clone() + return ret +} +func (o *Metadata) CloneItem() Item { + ret, _ := metadataPool.Get() + *(ret.(*Metadata)) = o.Clone() + return ret +} +func (o *QGroupInfo) CloneItem() Item { + ret, _ := qGroupInfoPool.Get() + *(ret.(*QGroupInfo)) = o.Clone() + return ret +} +func (o *QGroupLimit) CloneItem() Item { + ret, _ := qGroupLimitPool.Get() + *(ret.(*QGroupLimit)) = o.Clone() + return ret +} +func (o *QGroupStatus) CloneItem() Item { + ret, _ := qGroupStatusPool.Get() + *(ret.(*QGroupStatus)) = o.Clone() + return ret +} +func (o *Root) CloneItem() Item { ret, _ := rootPool.Get(); *(ret.(*Root)) = o.Clone(); return ret } +func (o *RootRef) CloneItem() Item { + ret, _ := rootRefPool.Get() + *(ret.(*RootRef)) = o.Clone() + return ret +} +func (o *SharedDataRef) CloneItem() Item { + ret, _ := sharedDataRefPool.Get() + *(ret.(*SharedDataRef)) = o.Clone() + return ret +} +func (o *UUIDMap) CloneItem() Item { + ret, _ := uuidMapPool.Get() + *(ret.(*UUIDMap)) = o.Clone() + return ret +} + +// Item type assertions. +var ( + _ Item = (*BlockGroup)(nil) + _ Item = (*Chunk)(nil) + _ Item = (*Dev)(nil) + _ Item = (*DevExtent)(nil) + _ Item = (*DevStats)(nil) + _ Item = (*DirEntry)(nil) + _ Item = (*Empty)(nil) + _ Item = (*Extent)(nil) + _ Item = (*ExtentCSum)(nil) + _ Item = (*ExtentDataRef)(nil) + _ Item = (*FileExtent)(nil) + _ Item = (*FreeSpaceBitmap)(nil) + _ Item = (*FreeSpaceHeader)(nil) + _ Item = (*FreeSpaceInfo)(nil) + _ Item = (*Inode)(nil) + _ Item = (*InodeRefs)(nil) + _ Item = (*Metadata)(nil) + _ Item = (*QGroupInfo)(nil) + _ Item = (*QGroupLimit)(nil) + _ Item = (*QGroupStatus)(nil) + _ Item = (*Root)(nil) + _ Item = (*RootRef)(nil) + _ Item = (*SharedDataRef)(nil) + _ Item = (*UUIDMap)(nil) +) + +// Clone type assertions. +var ( + _ interface{ Clone() BlockGroup } = BlockGroup{} + _ interface{ Clone() Chunk } = Chunk{} + _ interface{ Clone() Dev } = Dev{} + _ interface{ Clone() DevExtent } = DevExtent{} + _ interface{ Clone() DevStats } = DevStats{} + _ interface{ Clone() DirEntry } = DirEntry{} + _ interface{ Clone() Empty } = Empty{} + _ interface{ Clone() Extent } = Extent{} + _ interface{ Clone() ExtentCSum } = ExtentCSum{} + _ interface{ Clone() ExtentDataRef } = ExtentDataRef{} + _ interface{ Clone() FileExtent } = FileExtent{} + _ interface{ Clone() FreeSpaceBitmap } = FreeSpaceBitmap{} + _ interface{ Clone() FreeSpaceHeader } = FreeSpaceHeader{} + _ interface{ Clone() FreeSpaceInfo } = FreeSpaceInfo{} + _ interface{ Clone() Inode } = Inode{} + _ interface{ Clone() InodeRefs } = InodeRefs{} + _ interface{ Clone() Metadata } = Metadata{} + _ interface{ Clone() QGroupInfo } = QGroupInfo{} + _ interface{ Clone() QGroupLimit } = QGroupLimit{} + _ interface{ Clone() QGroupStatus } = QGroupStatus{} + _ interface{ Clone() Root } = Root{} + _ interface{ Clone() RootRef } = RootRef{} + _ interface{ Clone() SharedDataRef } = SharedDataRef{} + _ interface{ Clone() UUIDMap } = UUIDMap{} +) |