VersionTally.smali
.class public Lorg/bitcoinj/utils/VersionTally;
.super Ljava/lang/Object;
.source "VersionTally.java"
# instance fields
.field private final versionWindow:[J
.field private versionWriteHead:I
.field private versionsStored:I
# direct methods
.method public constructor <init>(Lorg/bitcoinj/core/NetworkParameters;)V
.registers 3
.prologue
const/4 v0, 0x0
.line 52
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 44
iput v0, p0, Lorg/bitcoinj/utils/VersionTally;->versionWriteHead:I
.line 50
iput v0, p0, Lorg/bitcoinj/utils/VersionTally;->versionsStored:I
.line 53
invoke-virtual {p1}, Lorg/bitcoinj/core/NetworkParameters;->getMajorityWindow()I
move-result v0
new-array v0, v0, [J
iput-object v0, p0, Lorg/bitcoinj/utils/VersionTally;->versionWindow:[J
.line 54
return-void
.end method
# virtual methods
.method public add(J)V
.registers 6
.prologue
.line 63
iget-object v0, p0, Lorg/bitcoinj/utils/VersionTally;->versionWindow:[J
iget v1, p0, Lorg/bitcoinj/utils/VersionTally;->versionWriteHead:I
add-int/lit8 v2, v1, 0x1
iput v2, p0, Lorg/bitcoinj/utils/VersionTally;->versionWriteHead:I
aput-wide p1, v0, v1
.line 64
iget v0, p0, Lorg/bitcoinj/utils/VersionTally;->versionWriteHead:I
iget-object v1, p0, Lorg/bitcoinj/utils/VersionTally;->versionWindow:[J
array-length v1, v1
if-ne v0, v1, :cond_14
.line 65
const/4 v0, 0x0
iput v0, p0, Lorg/bitcoinj/utils/VersionTally;->versionWriteHead:I
.line 67
:cond_14
iget v0, p0, Lorg/bitcoinj/utils/VersionTally;->versionsStored:I
add-int/lit8 v0, v0, 0x1
iput v0, p0, Lorg/bitcoinj/utils/VersionTally;->versionsStored:I
.line 68
return-void
.end method
.method public getCountAtOrAbove(J)Ljava/lang/Integer;
.registers 8
.prologue
const/4 v0, 0x0
.line 78
iget v1, p0, Lorg/bitcoinj/utils/VersionTally;->versionsStored:I
iget-object v2, p0, Lorg/bitcoinj/utils/VersionTally;->versionWindow:[J
array-length v2, v2
if-ge v1, v2, :cond_a
.line 79
const/4 v0, 0x0
.line 88
:goto_9
return-object v0
:cond_a
move v1, v0
.line 82
:goto_b
iget-object v2, p0, Lorg/bitcoinj/utils/VersionTally;->versionWindow:[J
array-length v2, v2
if-ge v0, v2, :cond_1d
.line 83
iget-object v2, p0, Lorg/bitcoinj/utils/VersionTally;->versionWindow:[J
aget-wide v2, v2, v0
cmp-long v2, v2, p1
if-ltz v2, :cond_1a
.line 84
add-int/lit8 v1, v1, 0x1
.line 82
:cond_1a
add-int/lit8 v0, v0, 0x1
goto :goto_b
.line 88
:cond_1d
invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v0
goto :goto_9
.end method
.method public initialize(Lorg/bitcoinj/store/BlockStore;Lorg/bitcoinj/core/StoredBlock;)V
.registers 7
.prologue
.line 102
new-instance v1, Ljava/util/Stack;
invoke-direct {v1}, Ljava/util/Stack;-><init>()V
.line 105
invoke-virtual {p2}, Lorg/bitcoinj/core/StoredBlock;->getHeader()Lorg/bitcoinj/core/Block;
move-result-object v0
invoke-virtual {v0}, Lorg/bitcoinj/core/Block;->getVersion()J
move-result-wide v2
invoke-static {v2, v3}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v0
invoke-virtual {v1, v0}, Ljava/util/Stack;->push(Ljava/lang/Object;)Ljava/lang/Object;
.line 106
const/4 v0, 0x0
:goto_15
iget-object v2, p0, Lorg/bitcoinj/utils/VersionTally;->versionWindow:[J
array-length v2, v2
if-ge v0, v2, :cond_32
.line 107
invoke-virtual {p2, p1}, Lorg/bitcoinj/core/StoredBlock;->getPrev(Lorg/bitcoinj/store/BlockStore;)Lorg/bitcoinj/core/StoredBlock;
move-result-object p2
.line 108
if-eqz p2, :cond_32
.line 111
invoke-virtual {p2}, Lorg/bitcoinj/core/StoredBlock;->getHeader()Lorg/bitcoinj/core/Block;
move-result-object v2
invoke-virtual {v2}, Lorg/bitcoinj/core/Block;->getVersion()J
move-result-wide v2
invoke-static {v2, v3}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/util/Stack;->push(Ljava/lang/Object;)Ljava/lang/Object;
.line 106
add-int/lit8 v0, v0, 0x1
goto :goto_15
.line 115
:cond_32
:goto_32
invoke-virtual {v1}, Ljava/util/Stack;->isEmpty()Z
move-result v0
if-nez v0, :cond_46
.line 116
invoke-virtual {v1}, Ljava/util/Stack;->pop()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/Long;
invoke-virtual {v0}, Ljava/lang/Long;->longValue()J
move-result-wide v2
invoke-virtual {p0, v2, v3}, Lorg/bitcoinj/utils/VersionTally;->add(J)V
goto :goto_32
.line 118
:cond_46
return-void
.end method
.method public size()I
.registers 2
.prologue
.line 124
iget-object v0, p0, Lorg/bitcoinj/utils/VersionTally;->versionWindow:[J
array-length v0, v0
return v0
.end method