MessageBuffer.smali
.class public final Lcom/open/net/client/structures/message/MessageBuffer;
.super Ljava/lang/Object;
.source "MessageBuffer.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
}
.end annotation
# static fields
.field public static final KB:I = 0x400
.field public static final MB:I = 0x100000
.field private static capacity_large:I = 0x100000
.field private static capacity_middle:I = 0x20000
.field private static capacity_small:I = 0x2000
.field private static max_size_temporary_cache:I = 0x2
.field private static size_large:I = 0x0
.field private static size_middle:I = 0x2
.field private static size_small:I = 0x5
# instance fields
.field private final REUSE_LARGE:I
.field private final REUSE_MIDDLE:I
.field private final REUSE_SMALL:I
.field private final REUSE_TEMP:I
.field private buffer_large:[B
.field private buffer_middle:[B
.field private buffer_small:[B
.field private mTemporaryCacheList:Ljava/util/LinkedList;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/LinkedList<",
"[B>;"
}
.end annotation
.end field
.field private tracker_buffer_large:Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
.field private tracker_buffer_middle:Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
.field private tracker_buffer_small:Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
# direct methods
.method static constructor <clinit>()V
.registers 0
return-void
.end method
.method public constructor <init>()V
.registers 4
.line 66
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 43
new-instance v0, Ljava/util/LinkedList;
invoke-direct {v0}, Ljava/util/LinkedList;-><init>()V
iput-object v0, p0, Lcom/open/net/client/structures/message/MessageBuffer;->mTemporaryCacheList:Ljava/util/LinkedList;
const/4 v0, 0x1
.line 47
iput v0, p0, Lcom/open/net/client/structures/message/MessageBuffer;->REUSE_SMALL:I
const/4 v0, 0x2
.line 48
iput v0, p0, Lcom/open/net/client/structures/message/MessageBuffer;->REUSE_MIDDLE:I
const/4 v0, 0x3
.line 49
iput v0, p0, Lcom/open/net/client/structures/message/MessageBuffer;->REUSE_LARGE:I
const/4 v0, 0x4
.line 50
iput v0, p0, Lcom/open/net/client/structures/message/MessageBuffer;->REUSE_TEMP:I
.line 67
sget v0, Lcom/open/net/client/structures/message/MessageBuffer;->size_small:I
sget v1, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_small:I
mul-int/2addr v1, v0
new-array v1, v1, [B
iput-object v1, p0, Lcom/open/net/client/structures/message/MessageBuffer;->buffer_small:[B
.line 68
sget v1, Lcom/open/net/client/structures/message/MessageBuffer;->size_middle:I
sget v2, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_middle:I
mul-int/2addr v1, v2
new-array v1, v1, [B
iput-object v1, p0, Lcom/open/net/client/structures/message/MessageBuffer;->buffer_middle:[B
.line 69
sget v1, Lcom/open/net/client/structures/message/MessageBuffer;->size_large:I
sget v2, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_large:I
mul-int/2addr v1, v2
new-array v1, v1, [B
iput-object v1, p0, Lcom/open/net/client/structures/message/MessageBuffer;->buffer_large:[B
.line 71
new-instance v1, Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
invoke-direct {v1, p0, v0}, Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;-><init>(Lcom/open/net/client/structures/message/MessageBuffer;I)V
iput-object v1, p0, Lcom/open/net/client/structures/message/MessageBuffer;->tracker_buffer_small:Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
.line 72
new-instance v0, Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
sget v1, Lcom/open/net/client/structures/message/MessageBuffer;->size_middle:I
invoke-direct {v0, p0, v1}, Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;-><init>(Lcom/open/net/client/structures/message/MessageBuffer;I)V
iput-object v0, p0, Lcom/open/net/client/structures/message/MessageBuffer;->tracker_buffer_middle:Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
.line 73
new-instance v0, Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
sget v1, Lcom/open/net/client/structures/message/MessageBuffer;->size_large:I
invoke-direct {v0, p0, v1}, Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;-><init>(Lcom/open/net/client/structures/message/MessageBuffer;I)V
iput-object v0, p0, Lcom/open/net/client/structures/message/MessageBuffer;->tracker_buffer_large:Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
return-void
.end method
.method private build(I)Lcom/open/net/client/structures/message/Message;
.registers 10
.line 84
invoke-static {}, Lcom/open/net/client/structures/pools/MessagePool;->get()Lcom/open/net/client/structures/message/Message;
move-result-object v0
.line 86
sget v1, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_small:I
const/4 v2, 0x3
const/4 v3, 0x2
const/4 v4, 0x4
const/4 v5, 0x1
if-gt p1, v1, :cond_f
.line 87
iput v5, v0, Lcom/open/net/client/structures/message/Message;->src_reuse_type:I
goto :goto_1f
.line 88
:cond_f
sget v1, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_middle:I
if-gt p1, v1, :cond_16
.line 89
iput v3, v0, Lcom/open/net/client/structures/message/Message;->src_reuse_type:I
goto :goto_1f
.line 90
:cond_16
sget v1, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_large:I
if-gt p1, v1, :cond_1d
.line 91
iput v2, v0, Lcom/open/net/client/structures/message/Message;->src_reuse_type:I
goto :goto_1f
.line 93
:cond_1d
iput v4, v0, Lcom/open/net/client/structures/message/Message;->src_reuse_type:I
.line 96
:goto_1f
sget v1, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_small:I
const/4 v6, -0x1
const/4 v7, 0x0
if-gt p1, v1, :cond_43
.line 97
iget-object v1, p0, Lcom/open/net/client/structures/message/MessageBuffer;->tracker_buffer_small:Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
invoke-virtual {v1}, Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;->get()I
move-result v1
if-eq v1, v6, :cond_43
.line 99
iput v1, v0, Lcom/open/net/client/structures/message/Message;->block_index:I
.line 100
iget-object p1, p0, Lcom/open/net/client/structures/message/MessageBuffer;->buffer_small:[B
iput-object p1, v0, Lcom/open/net/client/structures/message/Message;->data:[B
.line 101
sget p1, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_small:I
iput p1, v0, Lcom/open/net/client/structures/message/Message;->capacity:I
.line 102
sget p1, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_small:I
iget v1, v0, Lcom/open/net/client/structures/message/Message;->block_index:I
mul-int/2addr p1, v1
iput p1, v0, Lcom/open/net/client/structures/message/Message;->offset:I
.line 103
iput v7, v0, Lcom/open/net/client/structures/message/Message;->length:I
.line 104
iput v5, v0, Lcom/open/net/client/structures/message/Message;->dst_reuse_type:I
return-object v0
.line 109
:cond_43
sget v1, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_middle:I
if-gt p1, v1, :cond_65
.line 110
iget-object v1, p0, Lcom/open/net/client/structures/message/MessageBuffer;->tracker_buffer_middle:Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
invoke-virtual {v1}, Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;->get()I
move-result v1
if-eq v1, v6, :cond_65
.line 112
iput v1, v0, Lcom/open/net/client/structures/message/Message;->block_index:I
.line 113
iget-object p1, p0, Lcom/open/net/client/structures/message/MessageBuffer;->buffer_middle:[B
iput-object p1, v0, Lcom/open/net/client/structures/message/Message;->data:[B
.line 114
sget p1, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_middle:I
iput p1, v0, Lcom/open/net/client/structures/message/Message;->capacity:I
.line 115
sget p1, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_middle:I
iget v1, v0, Lcom/open/net/client/structures/message/Message;->block_index:I
mul-int/2addr p1, v1
iput p1, v0, Lcom/open/net/client/structures/message/Message;->offset:I
.line 116
iput v7, v0, Lcom/open/net/client/structures/message/Message;->length:I
.line 117
iput v3, v0, Lcom/open/net/client/structures/message/Message;->dst_reuse_type:I
return-object v0
.line 122
:cond_65
sget v1, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_large:I
if-gt p1, v1, :cond_87
.line 123
iget-object v1, p0, Lcom/open/net/client/structures/message/MessageBuffer;->tracker_buffer_large:Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
invoke-virtual {v1}, Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;->get()I
move-result v1
if-eq v1, v6, :cond_87
.line 125
iput v1, v0, Lcom/open/net/client/structures/message/Message;->block_index:I
.line 126
iget-object p1, p0, Lcom/open/net/client/structures/message/MessageBuffer;->buffer_large:[B
iput-object p1, v0, Lcom/open/net/client/structures/message/Message;->data:[B
.line 127
sget p1, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_large:I
iput p1, v0, Lcom/open/net/client/structures/message/Message;->capacity:I
.line 128
sget p1, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_large:I
iget v1, v0, Lcom/open/net/client/structures/message/Message;->block_index:I
mul-int/2addr p1, v1
iput p1, v0, Lcom/open/net/client/structures/message/Message;->offset:I
.line 129
iput v7, v0, Lcom/open/net/client/structures/message/Message;->length:I
.line 130
iput v2, v0, Lcom/open/net/client/structures/message/Message;->dst_reuse_type:I
return-object v0
.line 135
:cond_87
iget-object v1, p0, Lcom/open/net/client/structures/message/MessageBuffer;->mTemporaryCacheList:Ljava/util/LinkedList;
invoke-virtual {v1}, Ljava/util/LinkedList;->size()I
move-result v1
move v2, v7
:goto_8e
if-ge v2, v1, :cond_b6
.line 137
iget-object v3, p0, Lcom/open/net/client/structures/message/MessageBuffer;->mTemporaryCacheList:Ljava/util/LinkedList;
invoke-virtual {v3, v2}, Ljava/util/LinkedList;->get(I)Ljava/lang/Object;
move-result-object v3
check-cast v3, [B
array-length v3, v3
if-gt p1, v3, :cond_b3
.line 138
iput v7, v0, Lcom/open/net/client/structures/message/Message;->block_index:I
.line 139
iget-object p1, p0, Lcom/open/net/client/structures/message/MessageBuffer;->mTemporaryCacheList:Ljava/util/LinkedList;
invoke-virtual {p1, v2}, Ljava/util/LinkedList;->remove(I)Ljava/lang/Object;
move-result-object p1
check-cast p1, [B
iput-object p1, v0, Lcom/open/net/client/structures/message/Message;->data:[B
.line 140
iget-object p1, v0, Lcom/open/net/client/structures/message/Message;->data:[B
array-length p1, p1
iput p1, v0, Lcom/open/net/client/structures/message/Message;->capacity:I
.line 141
iput v7, v0, Lcom/open/net/client/structures/message/Message;->offset:I
.line 142
iput v7, v0, Lcom/open/net/client/structures/message/Message;->length:I
.line 143
iput v4, v0, Lcom/open/net/client/structures/message/Message;->dst_reuse_type:I
return-object v0
:cond_b3
add-int/lit8 v2, v2, 0x1
goto :goto_8e
.line 149
:cond_b6
iput v7, v0, Lcom/open/net/client/structures/message/Message;->block_index:I
.line 150
new-array p1, p1, [B
iput-object p1, v0, Lcom/open/net/client/structures/message/Message;->data:[B
.line 151
iget-object p1, v0, Lcom/open/net/client/structures/message/Message;->data:[B
array-length p1, p1
iput p1, v0, Lcom/open/net/client/structures/message/Message;->capacity:I
.line 152
iput v7, v0, Lcom/open/net/client/structures/message/Message;->offset:I
.line 153
iput v7, v0, Lcom/open/net/client/structures/message/Message;->length:I
.line 154
iput v4, v0, Lcom/open/net/client/structures/message/Message;->dst_reuse_type:I
return-object v0
.end method
.method public static init(IIIIIII)V
.registers 7
.line 56
sput p0, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_small:I
.line 57
sput p1, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_middle:I
.line 58
sput p2, Lcom/open/net/client/structures/message/MessageBuffer;->capacity_large:I
.line 60
sput p3, Lcom/open/net/client/structures/message/MessageBuffer;->size_small:I
.line 61
sput p4, Lcom/open/net/client/structures/message/MessageBuffer;->size_middle:I
.line 62
sput p5, Lcom/open/net/client/structures/message/MessageBuffer;->size_large:I
.line 63
sput p6, Lcom/open/net/client/structures/message/MessageBuffer;->max_size_temporary_cache:I
return-void
.end method
# virtual methods
.method public build([BII)Lcom/open/net/client/structures/message/Message;
.registers 7
.line 77
invoke-direct {p0, p3}, Lcom/open/net/client/structures/message/MessageBuffer;->build(I)Lcom/open/net/client/structures/message/Message;
move-result-object v0
.line 78
iget-object v1, v0, Lcom/open/net/client/structures/message/Message;->data:[B
iget v2, v0, Lcom/open/net/client/structures/message/Message;->offset:I
invoke-static {p1, p2, v1, v2, p3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 79
iput p3, v0, Lcom/open/net/client/structures/message/Message;->length:I
return-object v0
.end method
.method public release(Lcom/open/net/client/structures/message/Message;)V
.registers 4
.line 160
iget v0, p1, Lcom/open/net/client/structures/message/Message;->dst_reuse_type:I
const/4 v1, 0x1
if-ne v0, v1, :cond_10
.line 161
iget-object v0, p0, Lcom/open/net/client/structures/message/MessageBuffer;->tracker_buffer_small:Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
iget v1, p1, Lcom/open/net/client/structures/message/Message;->block_index:I
invoke-virtual {v0, v1}, Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;->release(I)V
.line 162
invoke-static {p1}, Lcom/open/net/client/structures/pools/MessagePool;->put(Lcom/open/net/client/structures/message/Message;)V
goto :goto_5c
.line 163
:cond_10
iget v0, p1, Lcom/open/net/client/structures/message/Message;->dst_reuse_type:I
const/4 v1, 0x2
if-ne v0, v1, :cond_20
.line 164
iget-object v0, p0, Lcom/open/net/client/structures/message/MessageBuffer;->tracker_buffer_middle:Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
iget v1, p1, Lcom/open/net/client/structures/message/Message;->block_index:I
invoke-virtual {v0, v1}, Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;->release(I)V
.line 165
invoke-static {p1}, Lcom/open/net/client/structures/pools/MessagePool;->put(Lcom/open/net/client/structures/message/Message;)V
goto :goto_5c
.line 166
:cond_20
iget v0, p1, Lcom/open/net/client/structures/message/Message;->dst_reuse_type:I
const/4 v1, 0x3
if-ne v0, v1, :cond_30
.line 167
iget-object v0, p0, Lcom/open/net/client/structures/message/MessageBuffer;->tracker_buffer_large:Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;
iget v1, p1, Lcom/open/net/client/structures/message/Message;->block_index:I
invoke-virtual {v0, v1}, Lcom/open/net/client/structures/message/MessageBuffer$MessageBufferTracker;->release(I)V
.line 168
invoke-static {p1}, Lcom/open/net/client/structures/pools/MessagePool;->put(Lcom/open/net/client/structures/message/Message;)V
goto :goto_5c
.line 169
:cond_30
iget v0, p1, Lcom/open/net/client/structures/message/Message;->dst_reuse_type:I
const/4 v1, 0x4
if-ne v0, v1, :cond_5c
.line 170
sget v0, Lcom/open/net/client/structures/message/MessageBuffer;->max_size_temporary_cache:I
if-lez v0, :cond_54
.line 171
:goto_39
iget-object v0, p0, Lcom/open/net/client/structures/message/MessageBuffer;->mTemporaryCacheList:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->size()I
move-result v0
sget v1, Lcom/open/net/client/structures/message/MessageBuffer;->max_size_temporary_cache:I
if-lt v0, v1, :cond_49
.line 172
iget-object v0, p0, Lcom/open/net/client/structures/message/MessageBuffer;->mTemporaryCacheList:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->poll()Ljava/lang/Object;
goto :goto_39
.line 174
:cond_49
iget-object v0, p0, Lcom/open/net/client/structures/message/MessageBuffer;->mTemporaryCacheList:Ljava/util/LinkedList;
iget-object v1, p1, Lcom/open/net/client/structures/message/Message;->data:[B
invoke-virtual {v0, v1}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z
.line 175
invoke-virtual {p1}, Lcom/open/net/client/structures/message/Message;->reset()V
goto :goto_5c
.line 177
:cond_54
iget-object v0, p0, Lcom/open/net/client/structures/message/MessageBuffer;->mTemporaryCacheList:Ljava/util/LinkedList;
invoke-virtual {v0}, Ljava/util/LinkedList;->clear()V
.line 178
invoke-virtual {p1}, Lcom/open/net/client/structures/message/Message;->reset()V
:cond_5c
:goto_5c
return-void
.end method