only one ip subnetting.

This commit is contained in:
Álvaro González 2026-03-08 21:20:31 +01:00
parent ab90c4ddc6
commit 39ec3a3e7d
4 changed files with 25 additions and 106 deletions

View file

@ -1,5 +1,5 @@
all: clean-container build-builders build-linux-debug-container
all: build-container clean-container build-builders build-linux-debug-container
DB=~/.local/share/com.example.d4rt_formulas/d4rt_formulas/formulas.sqlite
@ -10,17 +10,18 @@ clean:
flutter clean
[ -f $(DB) ] && rm $(DB)
clean-container: build-container
clean-container:
rm -r .build-container-cache
./flutterw clean
rm .build-container-cache
pub-get-container: build-container
pub-get-container:
./flutterw pub get
test:
./flutterw test
build-builders: build-container
build-builders:
./flutterw pub run build_runner build --delete-conflicting-outputs
build-android-release-container:

View file

@ -15,7 +15,8 @@ The network address is calculated by applying the subnet mask to zero out the ho
{"name": "hostIP", "unit": "string"}
],
"output": {"name": "network", "unit": "string"},
"d4rtCode": r"""var parts = hostIP.split('/');
"d4rtCode": r"""
var parts = hostIP.split('/');
var ip = parts[0];
var mask = int.parse(parts[1]);
var octets = ip.split('.').map((e) => int.parse(e)).toList();
@ -31,7 +32,8 @@ for (var i = 0; i < 4; i++) {
networkOctets.insert(0, networkValue & 0xFF);
networkValue = networkValue >> 8;
}
network = networkOctets.join('.') + '/' + mask.toString();""",
network = networkOctets.join('.') + '/' + mask.toString();
""",
"tags": ["networking", "ip", "subnetting", "cidr", "network"]
}
]

View file

@ -1,83 +0,0 @@
[
// IP Subnet and Broadcast Calculator
{
"name": "IP Subnet and Broadcast",
"description": r"""
Calculates the network (subnet) address and broadcast address for an IPv4 address with CIDR notation.
**Input format:** `ip_address/prefix` where:
- `ip_address`: IPv4 address in dotted decimal notation (e.g., `192.168.1.100`)
- `prefix`: CIDR prefix length (1-30) or subnet mask in dotted notation (e.g., `24` or `255.255.255.0`)
**Output:**
- `subnet`: Network address in dotted decimal notation
- `broadcast`: Broadcast address in dotted decimal notation
**Examples:**
- Input: `192.168.1.100/24` → Subnet: `192.168.1.0`, Broadcast: `192.168.1.255`
- Input: `10.0.0.50/8` → Subnet: `10.0.0.0`, Broadcast: `10.255.255.255`
- Input: `172.16.5.100/16` → Subnet: `172.16.0.0`, Broadcast: `172.16.255.255`""",
"input": [
{"name": "ipWithMask", "unit": "scalar"}
],
"output": {"name": "subnet", "unit": "scalar"},
"d4rtCode": """
var input = ipWithMask.toString();
var slashIndex = input.indexOf('/');
if (slashIndex == -1) {
subnet = 'error: no / found';
broadcast = '';
} else {
var ipPart = input.substring(0, slashIndex).trim();
var maskPart = input.substring(slashIndex + 1).trim();
// Parse IP address
var ipParts = ipPart.split('.');
if (ipParts.length != 4) {
subnet = 'error: invalid IP';
broadcast = '';
} else {
var octet1 = int.parse(ipParts[0]);
var octet2 = int.parse(ipParts[1]);
var octet3 = int.parse(ipParts[2]);
var octet4 = int.parse(ipParts[3]);
// Convert IP to 32-bit integer
var ipInt = (octet1 << 24) | (octet2 << 16) | (octet3 << 8) | octet4;
// Parse mask (CIDR prefix or dotted notation)
int maskInt;
if (maskPart.contains('.')) {
var maskParts = maskPart.split('.');
var m1 = int.parse(maskParts[0]);
var m2 = int.parse(maskParts[1]);
var m3 = int.parse(maskParts[2]);
var m4 = int.parse(maskParts[3]);
maskInt = (m1 << 24) | (m2 << 16) | (m3 << 8) | m4;
} else {
var prefix = int.parse(maskPart);
maskInt = prefix == 0 ? 0 : (-1 << (32 - prefix));
}
// Calculate subnet and broadcast
var subnetInt = ipInt & maskInt;
var broadcastInt = subnetInt | (~maskInt & 0xFFFFFFFF);
// Convert back to dotted notation
var s1 = (subnetInt >> 24) & 0xFF;
var s2 = (subnetInt >> 16) & 0xFF;
var s3 = (subnetInt >> 8) & 0xFF;
var s4 = subnetInt & 0xFF;
subnet = '\$s1.\$s2.\$s3.\$s4';
var b1 = (broadcastInt >> 24) & 0xFF;
var b2 = (broadcastInt >> 16) & 0xFF;
var b3 = (broadcastInt >> 8) & 0xFF;
var b4 = broadcastInt & 0xFF;
broadcast = '\$b1.\$b2.\$b3.\$b4';
}
}
""",
"tags": ["networking", "ip", "subnet", "broadcast", "cidr"]
}
]

View file

@ -63,7 +63,6 @@ Future<Corpus> createDefaultCorpus() async{
"assets/formulas/materials_elasticity.d4rt",
"assets/formulas/medical_and_bio.d4rt",
"assets/formulas/misc_math.d4rt",
"assets/formulas/networking.d4rt",
"assets/formulas/optics.d4rt",
"assets/formulas/thermodynamics.d4rt",
"assets/formulas/trigonometry.d4rt",