Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2b562b5
commit d7d4276
Showing
3 changed files
with
173 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
79 changes: 79 additions & 0 deletions
79
data/src/main/scala/swaydb/data/accelerate/BrakeBuilder.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
package swaydb.data.accelerate | ||
|
||
import scala.concurrent.duration.FiniteDuration | ||
|
||
class BrakeBuilder { | ||
private var increaseMapSizeOnMapCount: Int = _ | ||
private var increaseMapSizeBy: Int = _ | ||
private var maxMapSize: Long = _ | ||
private var brakeOnMapCount: Int = _ | ||
private var brakeFor: FiniteDuration = _ | ||
private var releaseRate: FiniteDuration = _ | ||
private var levelZeroMeter: LevelZeroMeter = _ | ||
} | ||
|
||
object BrakeBuilder { | ||
|
||
class Step0(builder: BrakeBuilder) { | ||
def withIncreaseMapSizeOnMapCount(increaseMapSizeOnMapCount: Int) = { | ||
builder.increaseMapSizeOnMapCount = increaseMapSizeOnMapCount | ||
new Step1(builder) | ||
} | ||
} | ||
|
||
class Step1(builder: BrakeBuilder) { | ||
def withIncreaseMapSizeBy(increaseMapSizeBy: Int) = { | ||
builder.increaseMapSizeBy = increaseMapSizeBy | ||
new Step2(builder) | ||
} | ||
} | ||
|
||
class Step2(builder: BrakeBuilder) { | ||
def withMaxMapSize(maxMapSize: Long) = { | ||
builder.maxMapSize = maxMapSize | ||
new Step3(builder) | ||
} | ||
} | ||
|
||
class Step3(builder: BrakeBuilder) { | ||
def withBrakeOnMapCount(brakeOnMapCount: Int) = { | ||
builder.brakeOnMapCount = brakeOnMapCount | ||
new Step4(builder) | ||
} | ||
} | ||
|
||
class Step4(builder: BrakeBuilder) { | ||
def withBrakeFor(brakeFor: FiniteDuration) = { | ||
builder.brakeFor = brakeFor | ||
new Step5(builder) | ||
} | ||
} | ||
|
||
class Step5(builder: BrakeBuilder) { | ||
def withReleaseRate(releaseRate: FiniteDuration) = { | ||
builder.releaseRate = releaseRate | ||
new Step6(builder) | ||
} | ||
} | ||
|
||
class Step6(builder: BrakeBuilder) { | ||
def withLevelZeroMeter(levelZeroMeter: LevelZeroMeter) = { | ||
builder.levelZeroMeter = levelZeroMeter | ||
new Step7(builder) | ||
} | ||
} | ||
|
||
class Step7(builder: BrakeBuilder) { | ||
def build(): Accelerator = | ||
Accelerator.brake( | ||
increaseMapSizeOnMapCount = builder.increaseMapSizeOnMapCount, | ||
increaseMapSizeBy = builder.increaseMapSizeBy, | ||
maxMapSize = builder.maxMapSize, | ||
brakeOnMapCount = builder.brakeOnMapCount, | ||
brakeFor = builder.brakeFor, | ||
releaseRate = builder.releaseRate | ||
)(builder.levelZeroMeter) | ||
} | ||
|
||
def builder() = new Step0(new BrakeBuilder()) | ||
} |
74 changes: 74 additions & 0 deletions
74
data/src/main/scala/swaydb/data/accelerate/NoBrakesBuilder.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
/* | ||
* Copyright (c) 2020 Simer JS Plaha (simer.j@gmail.com - @simerplaha) | ||
* | ||
* This file is a part of SwayDB. | ||
* | ||
* SwayDB 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. | ||
* | ||
* SwayDB 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 SwayDB. If not, see <https://www.gnu.org/licenses/>. | ||
* | ||
* Additional permission under the GNU Affero GPL version 3 section 7: | ||
* If you modify this Program, or any covered work, by linking or combining | ||
* it with other code, such other code is not for that reason alone subject | ||
* to any of the requirements of the GNU Affero GPL version 3. | ||
*/ | ||
|
||
package swaydb.data.accelerate | ||
|
||
class NoBrakesBuilder { | ||
private var onMapCount: Int = _ | ||
private var increaseMapSizeBy: Int = _ | ||
private var maxMapSize: Long = _ | ||
private var level0Meter: LevelZeroMeter = _ | ||
} | ||
|
||
object NoBrakesBuilder { | ||
|
||
class Step0(builder: NoBrakesBuilder) { | ||
def withOnMapCount(onMapCount: Int) = { | ||
builder.onMapCount = onMapCount | ||
new Step1(builder) | ||
} | ||
} | ||
|
||
class Step1(builder: NoBrakesBuilder) { | ||
def withIncreaseMapSizeBy(increaseMapSizeBy: Int) = { | ||
builder.increaseMapSizeBy = increaseMapSizeBy | ||
new Step2(builder) | ||
} | ||
} | ||
|
||
class Step2(builder: NoBrakesBuilder) { | ||
def withMaxMapSize(maxMapSize: Long) = { | ||
builder.maxMapSize = maxMapSize | ||
new Step3(builder) | ||
} | ||
} | ||
|
||
class Step3(builder: NoBrakesBuilder) { | ||
def withLevel0Meter(level0Meter: LevelZeroMeter) = { | ||
builder.level0Meter = level0Meter | ||
new Step4(builder) | ||
} | ||
} | ||
|
||
class Step4(builder: NoBrakesBuilder) { | ||
def build(): Accelerator = | ||
Accelerator.noBrakes( | ||
onMapCount = builder.onMapCount, | ||
increaseMapSizeBy = builder.increaseMapSizeBy, | ||
maxMapSize = builder.maxMapSize | ||
)(builder.level0Meter) | ||
} | ||
|
||
def builder() = new Step0(new NoBrakesBuilder()) | ||
} |