Работа с файлами
Портирование интерфейса с с++ Полировка кода
This commit is contained in:
parent
c79951d361
commit
79db4aea65
|
@ -8,7 +8,7 @@
|
||||||
"name": "graphs0",
|
"name": "graphs0",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"type": "dart",
|
"type": "dart",
|
||||||
"program": "bin/main.dart"
|
"program": "bin/graphs0.dart"
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -1 +1 @@
|
||||||
A simple command-line application.
|
Application to store graph data.
|
||||||
|
|
|
@ -0,0 +1,290 @@
|
||||||
|
import 'src/graph.dart';
|
||||||
|
import 'dart:convert';
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
int getIntLine() => int.parse(stdin.readLineSync(encoding: utf8)!);
|
||||||
|
String getStrLine() => stdin.readLineSync(encoding: utf8)!;
|
||||||
|
|
||||||
|
void main(List<String> arguments) {
|
||||||
|
Map<int, int> x = {1: 10, 2: 11};
|
||||||
|
var p = Dot.fromMap("Т1", x);
|
||||||
|
p.printD();
|
||||||
|
x = <int, int>{};
|
||||||
|
|
||||||
|
x[1] = 11;
|
||||||
|
var p2 = Dot.fromMap("Т2", x);
|
||||||
|
p2.printD();
|
||||||
|
x = <int, int>{};
|
||||||
|
|
||||||
|
var x1 = Graphs.fromList("Граф 1", [p, p2], true, false);
|
||||||
|
x1.addDot(p);
|
||||||
|
x1.addDotFromToLists("T3", [1, 2], [10, 20]);
|
||||||
|
x1.addIsolated("T4");
|
||||||
|
x1.checkDots(true);
|
||||||
|
x1.printG();
|
||||||
|
print(x1.addPath(4, 1, 10));
|
||||||
|
x1.printG();
|
||||||
|
x1.printToFile("outTest.txt");
|
||||||
|
var x2 = Graphs.fromFile("outTest.txt");
|
||||||
|
x2.printG();
|
||||||
|
x2.delPath(1, 4);
|
||||||
|
x2.printG();
|
||||||
|
x2.delDot(1);
|
||||||
|
x2.printG();
|
||||||
|
x2.delDot(2);
|
||||||
|
x2.printG();
|
||||||
|
x2.addPath(1, 2, 11);
|
||||||
|
x2.printG();
|
||||||
|
|
||||||
|
int deistvie = 1;
|
||||||
|
List<Graphs> graphs = <Graphs>[];
|
||||||
|
String name;
|
||||||
|
String str = "";
|
||||||
|
Separators sep = Separators();
|
||||||
|
while (deistvie != 0) {
|
||||||
|
stdout.write(
|
||||||
|
"1 - создать граф, 2 - удалить граф, 3 - добавить в граф вершину,\n4 - удалить вершину, 5 - добавить ребро/дугу, 6 - удалить ребро/дугу,\n7 - вывести граф на экран, 8 - вывести граф в файл, 0 - выход\nDeistvie: ");
|
||||||
|
deistvie = getIntLine();
|
||||||
|
switch (deistvie) {
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
// создать граф
|
||||||
|
print("1 - ввести из файла, 2 - ввести вручную\nDeistvie: ");
|
||||||
|
int d = getIntLine();
|
||||||
|
List<Dot> list = <Dot>[];
|
||||||
|
switch (d) {
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
// из файла
|
||||||
|
stdout.write("Имя файла: ");
|
||||||
|
name = getStrLine();
|
||||||
|
graphs.add(Graphs.fromFile(name));
|
||||||
|
graphs.last.printG();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
// с консоли
|
||||||
|
stdout.write("Имя графа: ");
|
||||||
|
name = getStrLine();
|
||||||
|
|
||||||
|
stdout.write(
|
||||||
|
"Граф: 1 - ориентированный, 2 - не ориентированный: ");
|
||||||
|
bool isOriented;
|
||||||
|
String x = getStrLine();
|
||||||
|
if (x == "1") {
|
||||||
|
isOriented = true;
|
||||||
|
} else {
|
||||||
|
isOriented = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
stdout.write("Граф: 1 - взвешенный, 2 - не взвешенный: ");
|
||||||
|
bool hasLength;
|
||||||
|
x = getStrLine();
|
||||||
|
if (x == "1") {
|
||||||
|
hasLength = true;
|
||||||
|
} else {
|
||||||
|
hasLength = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
stdout.write("Количество вершин: ");
|
||||||
|
int n = getIntLine();
|
||||||
|
|
||||||
|
list = <Dot>[];
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
stdout.write("Имя вершины: ");
|
||||||
|
String dotName = getStrLine();
|
||||||
|
|
||||||
|
stdout.write(
|
||||||
|
"Ввод: *куда*|*вес* через пробел. Если граф не взвешенный, то *вес* можно не указывать.\nВершина №${i + 1}. Смежна с: ");
|
||||||
|
str = getStrLine();
|
||||||
|
|
||||||
|
List<int> inn = <int>[];
|
||||||
|
List<int> len = <int>[];
|
||||||
|
while (str != "" && str != " ") {
|
||||||
|
List<String> a = str.split(sep.space);
|
||||||
|
for (var splitted in a) {
|
||||||
|
var dt = splitted.split(sep.dotToLength);
|
||||||
|
if (dt.length == 2) {
|
||||||
|
inn.add(int.parse(dt[0]));
|
||||||
|
len.add(int.parse(dt[1]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
list.add(Dot.fromTwoLists(dotName, inn, len));
|
||||||
|
}
|
||||||
|
Graphs newG =
|
||||||
|
Graphs.fromList(name, list, hasLength, isOriented);
|
||||||
|
newG.printG();
|
||||||
|
graphs.add(newG);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
// удалить граф
|
||||||
|
int num = graphs.length;
|
||||||
|
stdout.write(
|
||||||
|
"Нумерация с 0. Количество сохраненных графов: $num. Удалить граф с номером: ");
|
||||||
|
int x = getIntLine();
|
||||||
|
if (x >= 0 && x < num) {
|
||||||
|
/*
|
||||||
|
vector<graf>::iterator i = grafs.begin();
|
||||||
|
for (int j = 0; j < x; j++) {
|
||||||
|
i++;}
|
||||||
|
grafs.erase(i);*/
|
||||||
|
} else {
|
||||||
|
print("Не найден граф с таким номером");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
// добавить вершину
|
||||||
|
List<int> inn = <int>[];
|
||||||
|
List<int> len = <int>[];
|
||||||
|
stdout.write(
|
||||||
|
"Ввод: *куда*|*вес* через пробел. Если граф не взвешенный, то в *вес* ставить 0: ");
|
||||||
|
String x = getStrLine();
|
||||||
|
while (x != "" && x != " ") {
|
||||||
|
String a = x.substring(0, x.indexOf(sep.dotToLength));
|
||||||
|
if (x.contains(sep.dotToLength)) {
|
||||||
|
x = x.substring(x.indexOf(" ") + 1, x.length);
|
||||||
|
} else {
|
||||||
|
x = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a.contains(sep.dotToLength)) {
|
||||||
|
inn.add(int.parse((a.substring(0, a.indexOf(sep.dotToLength)))));
|
||||||
|
len.add(int.parse(
|
||||||
|
a.substring(a.indexOf(sep.dotToLength) + 1, a.length)));
|
||||||
|
} else {
|
||||||
|
inn.add(int.parse(a));
|
||||||
|
len.add(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int num = graphs.length;
|
||||||
|
stdout.write(
|
||||||
|
"Нумерация с 0. Количество сохраненных графов: $num. Вставка в графа с номером: ");
|
||||||
|
int y = getIntLine();
|
||||||
|
if (y >= 0 && y < num) {
|
||||||
|
graphs[y].addDotFromToLists("0", inn, len);
|
||||||
|
} else {
|
||||||
|
print("Не найден граф с таким номером");
|
||||||
|
}
|
||||||
|
graphs[y].printG();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
// удалить вершину
|
||||||
|
int num = graphs.length;
|
||||||
|
stdout.write(
|
||||||
|
"Нумерация с 0. Количество сохраненных графов: $num. Вывод графа с номером: ");
|
||||||
|
int y = getIntLine();
|
||||||
|
graphs[y].printG();
|
||||||
|
if (y >= 0 && y < num) {
|
||||||
|
num = graphs[y].getDotAmount();
|
||||||
|
stdout.write("Количество вершин: $num. Вершина для удаления: ");
|
||||||
|
int x = getIntLine();
|
||||||
|
if (x >= 0 && x < num) {
|
||||||
|
graphs[y].delDot(x);
|
||||||
|
} else {
|
||||||
|
print("Не найдены вершины в графе\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print("Не найден граф с таким номером");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 5:
|
||||||
|
{
|
||||||
|
// добавить ребро/дугу
|
||||||
|
int num = graphs.length;
|
||||||
|
stdout.write(
|
||||||
|
"Нумерация с 0. Количество сохраненных графов: $num. Вставка в граф с номером: ");
|
||||||
|
int y = getIntLine();
|
||||||
|
graphs[y].printG();
|
||||||
|
if (y >= 0 && y < num) {
|
||||||
|
num = graphs[y].getDotAmount();
|
||||||
|
stdout.write("Количество вершин: $num. Вершина куда вствляется: ");
|
||||||
|
int x1 = getIntLine();
|
||||||
|
stdout.write("Вершина, которую вставляют: ");
|
||||||
|
int x2 = getIntLine();
|
||||||
|
stdout.write("Вес ребра, вствить 0 если граф не взвешенный: ");
|
||||||
|
int w = getIntLine();
|
||||||
|
if (x1 >= 0 && x1 < num && x2 >= 0 && x2 < num) {
|
||||||
|
graphs[y].addPath(x1, x2, w);
|
||||||
|
} else {
|
||||||
|
print("Не найдены вершины в графе\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print("Не найден граф с таким номером");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 6:
|
||||||
|
{
|
||||||
|
// удалить ребро/дугу
|
||||||
|
int num = graphs.length;
|
||||||
|
stdout.write(
|
||||||
|
"Нумерация с 0. Количество сохраненных графов: $num. Удаление из графа с номером: ");
|
||||||
|
int y = getIntLine();
|
||||||
|
graphs[y].printG();
|
||||||
|
int x1, x2;
|
||||||
|
if (y >= 0 && y < num) {
|
||||||
|
num = graphs[y].getDotAmount();
|
||||||
|
stdout.write(
|
||||||
|
"Количество вершин: $num. Введите через пробел номера вершин между которыми удалить ребро: ");
|
||||||
|
List<String> x = getStrLine().split(sep.space);
|
||||||
|
x1 = int.parse(x[0]);
|
||||||
|
x2 = int.parse(x[1]);
|
||||||
|
if (x1 >= 0 && x1 < num && x2 >= 0 && x2 < num) {
|
||||||
|
graphs[y].delPath(x1, x2);
|
||||||
|
} else {
|
||||||
|
print("Не найдены вершины в графе\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print("Не найден граф с таким номером");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 7: // вывод в консоль
|
||||||
|
{
|
||||||
|
int num = graphs.length;
|
||||||
|
stdout.write(
|
||||||
|
"Нумерация с 0. Количество сохраненных графов: $num. Вывод графа с номером: ");
|
||||||
|
int x = getIntLine();
|
||||||
|
if (x >= 0 && x < num) {
|
||||||
|
graphs[x].printG();
|
||||||
|
} else {
|
||||||
|
print("Не найден граф с таким номером");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 8:
|
||||||
|
{
|
||||||
|
// вывод в файл
|
||||||
|
int num = graphs.length;
|
||||||
|
stdout.write(
|
||||||
|
"Нумерация с 0. Количество сохраненных графов: $num. Вывод графа с номером: ");
|
||||||
|
int x = getIntLine();
|
||||||
|
stdout.write("В файл: ");
|
||||||
|
String out = getStrLine();
|
||||||
|
if (x >= 0 && x < num) {
|
||||||
|
graphs[x].printToFile(out);
|
||||||
|
} else {
|
||||||
|
print("Не найден граф с таким номером");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0:
|
||||||
|
exit(0);
|
||||||
|
default:
|
||||||
|
print("Действие не распознано");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,24 +0,0 @@
|
||||||
import 'src/graph.dart';
|
|
||||||
|
|
||||||
void main(List<String> arguments) {
|
|
||||||
Map<int, int> x = {1: 10, 2: 11};
|
|
||||||
var p = Dot.fromMap("Т1", x);
|
|
||||||
p.printD();
|
|
||||||
x = <int, int>{};
|
|
||||||
|
|
||||||
x[1] = 11;
|
|
||||||
var p2 = Dot.fromMap("Т2", x);
|
|
||||||
p2.printD();
|
|
||||||
x = <int, int>{};
|
|
||||||
|
|
||||||
var x1 = Graphs.fromList("Граф 1", [p, p2], true, false);
|
|
||||||
x1.addDot(p);
|
|
||||||
x1.addDotFromToLists("T3", [1, 2], [10, 20]);
|
|
||||||
x1.addIsolated("T4");
|
|
||||||
x1.checkDots(true);
|
|
||||||
x1.printG();
|
|
||||||
print(x1.addPath(4, 1, 10));
|
|
||||||
print(x1.addPath(4, 2, 10));
|
|
||||||
x1.printG();
|
|
||||||
x1.toFile("outTest.txt");
|
|
||||||
}
|
|
|
@ -19,14 +19,15 @@ class Dot {
|
||||||
// ignore: prefer_final_fields
|
// ignore: prefer_final_fields
|
||||||
String _name = "";
|
String _name = "";
|
||||||
int num = -1;
|
int num = -1;
|
||||||
Map<int, int> ln = <int, int>{};
|
Map<int, int> _ln = <int, int>{};
|
||||||
|
|
||||||
//****Get****
|
//****Get****
|
||||||
String getName() => _name;
|
String getName() => _name;
|
||||||
bool hasConnection(int n) => ln.containsKey(n);
|
bool hasConnection(int n) => _ln.containsKey(n);
|
||||||
|
Map<int, int> getL() => _ln;
|
||||||
int getLength(int x) {
|
int getLength(int x) {
|
||||||
if (hasConnection(x)) {
|
if (hasConnection(x)) {
|
||||||
return ln[x]!;
|
return _ln[x]!;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -36,18 +37,17 @@ class Dot {
|
||||||
void setName(String n) => _name = n;
|
void setName(String n) => _name = n;
|
||||||
|
|
||||||
//Add
|
//Add
|
||||||
void addPath(int inp, int length) =>
|
void addPath(int inp, int length) => _ln[inp] = length;
|
||||||
ln[inp] = length; // нужна проверка на ориентированность
|
|
||||||
|
|
||||||
//Del
|
//Del
|
||||||
void delPath(int n) => ln.removeWhere((key, value) =>
|
void delPath(int n) => _ln.removeWhere((key, value) =>
|
||||||
key == n); // удалить обратный путь если не ориентированный
|
key == n); // удалить обратный путь если не ориентированный
|
||||||
|
|
||||||
//Print
|
//Print
|
||||||
void printD() {
|
void printD() {
|
||||||
stdout.write("$_name: №$num => ");
|
stdout.write("$_name: №$num => ");
|
||||||
for (var i in ln.keys) {
|
for (var i in _ln.keys) {
|
||||||
stdout.write("$i|${ln[i]} ");
|
stdout.write("$i|${_ln[i]} ");
|
||||||
}
|
}
|
||||||
stdout.write("\n");
|
stdout.write("\n");
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ class Dot {
|
||||||
Dot() {
|
Dot() {
|
||||||
_name = "Undefined";
|
_name = "Undefined";
|
||||||
num = -1;
|
num = -1;
|
||||||
ln = <int, int>{};
|
_ln = <int, int>{};
|
||||||
}
|
}
|
||||||
Dot.fromTwoLists(String name, List<int> num0, List<int> length,
|
Dot.fromTwoLists(String name, List<int> num0, List<int> length,
|
||||||
[int n = -1]) {
|
[int n = -1]) {
|
||||||
|
@ -68,14 +68,14 @@ class Dot {
|
||||||
} else {
|
} else {
|
||||||
for (var i = 0; i < num0.length; i++) {
|
for (var i = 0; i < num0.length; i++) {
|
||||||
nw[num0[i]] = length[i];
|
nw[num0[i]] = length[i];
|
||||||
ln = nw;
|
_ln = nw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Dot.fromMap(String name, Map<int, int> l, [int n = -1]) {
|
Dot.fromMap(String name, Map<int, int> l, [int n = -1]) {
|
||||||
_name = name;
|
_name = name;
|
||||||
num = n;
|
num = n;
|
||||||
ln = l;
|
_ln = l;
|
||||||
}
|
}
|
||||||
//******Constructor******
|
//******Constructor******
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ class Dot {
|
||||||
Dot.clone(Dot a) {
|
Dot.clone(Dot a) {
|
||||||
_name = a.getName();
|
_name = a.getName();
|
||||||
num = a.num;
|
num = a.num;
|
||||||
ln = a.ln;
|
_ln = a._ln;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,10 +92,8 @@ class Graphs {
|
||||||
String _name = "Undefined"; //Имя
|
String _name = "Undefined"; //Имя
|
||||||
int _amount = 0; //Количество вершин
|
int _amount = 0; //Количество вершин
|
||||||
List<Dot> _dots = <Dot>[]; //Список смежности вершин
|
List<Dot> _dots = <Dot>[]; //Список смежности вершин
|
||||||
// ignore: prefer_final_fields
|
|
||||||
Map<int, String> _nameTable = <int, String>{}; //Список вершин по именам
|
Map<int, String> _nameTable = <int, String>{}; //Список вершин по именам
|
||||||
bool _useLength = false; //Взвешенность
|
bool _useLength = false; //Взвешенность
|
||||||
// ignore: prefer_final_fields
|
|
||||||
bool _oriented = false; //Ориентированность
|
bool _oriented = false; //Ориентированность
|
||||||
|
|
||||||
//*********************Add************************
|
//*********************Add************************
|
||||||
|
@ -149,12 +147,40 @@ class Graphs {
|
||||||
}
|
}
|
||||||
//*********************Add************************
|
//*********************Add************************
|
||||||
|
|
||||||
|
//*********Delete*********
|
||||||
|
bool delPath(int from, int to) {
|
||||||
|
if (from <= 0 || from > _amount || to <= 0 && to > _amount) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
_dots[from - 1].delPath(to);
|
||||||
|
if (!_oriented) {
|
||||||
|
_dots[to - 1].delPath(from);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool delDot(int inn) {
|
||||||
|
List<int> toDel = <int>[];
|
||||||
|
for (int i in _dots[inn - 1].getL().keys) {
|
||||||
|
toDel.add(i);
|
||||||
|
}
|
||||||
|
for (int i in toDel) {
|
||||||
|
delPath(i, inn);
|
||||||
|
}
|
||||||
|
_dots.removeAt(inn - 1);
|
||||||
|
_syncNum();
|
||||||
|
_syncNameTable();
|
||||||
|
_fixAfterDel(inn);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//*********Delete*********
|
||||||
|
|
||||||
//******Helper*******
|
//******Helper*******
|
||||||
bool checkDots([bool verbose = false]) {
|
bool checkDots([bool verbose = false]) {
|
||||||
for (var a in _dots) {
|
for (var a in _dots) {
|
||||||
for (var i in a.ln.keys) {
|
for (var i in a.getL().keys) {
|
||||||
try {
|
try {
|
||||||
if (!_dots[i - 1].ln.containsKey(a.num)) {
|
if (!_dots[i - 1].getL().containsKey(a.num)) {
|
||||||
if (verbose) print("Can't find ${a.num}");
|
if (verbose) print("Can't find ${a.num}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -162,7 +188,7 @@ class Graphs {
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
print("Can't find Dot $i for path ${a.num}->$i. Exception $e");
|
print("Can't find Dot $i for path ${a.num}->$i. Exception $e");
|
||||||
}
|
}
|
||||||
_dots[a.num - 1].ln.remove(i);
|
_dots[a.num - 1].getL().remove(i);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -170,11 +196,25 @@ class Graphs {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _fixAfterDel(int inn) {
|
||||||
|
for (int i = 0; i < _dots.length; i++) {
|
||||||
|
Map<int, int> l = <int, int>{};
|
||||||
|
for (int j in _dots[i].getL().keys) {
|
||||||
|
if (j >= inn) {
|
||||||
|
l[j - 1] = _dots[i].getL()[j]!;
|
||||||
|
} else {
|
||||||
|
l[j] = _dots[i].getL()[j]!;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_dots[i] = Dot.fromMap(_dots[i].getName(), l, _dots[i].num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void _fixPathAfterInsert(Dot a) {
|
void _fixPathAfterInsert(Dot a) {
|
||||||
//Для неориентированного
|
//Для неориентированного
|
||||||
for (var i in a.ln.keys) {
|
for (var i in a.getL().keys) {
|
||||||
if (!_dots[i - 1].ln.containsKey(a.num)) {
|
if (!_dots[i - 1].getL().containsKey(a.num)) {
|
||||||
_dots[i - 1].addPath(i, a.ln[i]!);
|
addPath(i, a.num, a.getL()[i]!);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -207,6 +247,7 @@ class Graphs {
|
||||||
List<Dot> getDots() => _dots;
|
List<Dot> getDots() => _dots;
|
||||||
String getName() => _name;
|
String getName() => _name;
|
||||||
String? getNameByNum(int n) => _nameTable[n];
|
String? getNameByNum(int n) => _nameTable[n];
|
||||||
|
int getDotAmount() => _dots.length;
|
||||||
int? getNumByName(String n) {
|
int? getNumByName(String n) {
|
||||||
for (var i in _nameTable.keys) {
|
for (var i in _nameTable.keys) {
|
||||||
if (_nameTable[i] == n) return i;
|
if (_nameTable[i] == n) return i;
|
||||||
|
@ -245,7 +286,7 @@ class Graphs {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void toFile(String name) {
|
void printToFile(String name) {
|
||||||
Separators sep = Separators();
|
Separators sep = Separators();
|
||||||
var file = File(name);
|
var file = File(name);
|
||||||
file.writeAsStringSync("$_name\n");
|
file.writeAsStringSync("$_name\n");
|
||||||
|
@ -262,7 +303,7 @@ class Graphs {
|
||||||
for (int i = 0; i < _amount; i++) {
|
for (int i = 0; i < _amount; i++) {
|
||||||
file.writeAsStringSync((i + 1).toString() + sep.dotToConnections,
|
file.writeAsStringSync((i + 1).toString() + sep.dotToConnections,
|
||||||
mode: FileMode.append);
|
mode: FileMode.append);
|
||||||
var d = _dots[i].ln;
|
var d = _dots[i].getL();
|
||||||
for (var j in d.keys) {
|
for (var j in d.keys) {
|
||||||
file.writeAsStringSync(
|
file.writeAsStringSync(
|
||||||
j.toString() + sep.dotToLength + d[j].toString() + " ",
|
j.toString() + sep.dotToLength + d[j].toString() + " ",
|
||||||
|
@ -283,10 +324,10 @@ class Graphs {
|
||||||
_amount = 0;
|
_amount = 0;
|
||||||
_nameTable = <int, String>{};
|
_nameTable = <int, String>{};
|
||||||
}
|
}
|
||||||
Graphs.fromList(String n, List<Dot> d, bool useL, bool oriented) {
|
Graphs.fromList(String name, List<Dot> dots, bool hasLen, bool oriented) {
|
||||||
_name = n;
|
_name = name;
|
||||||
_dots = d;
|
_dots = dots;
|
||||||
_useLength = useL;
|
_useLength = hasLen;
|
||||||
_amount = _dots.length;
|
_amount = _dots.length;
|
||||||
_oriented = oriented;
|
_oriented = oriented;
|
||||||
_syncNum();
|
_syncNum();
|
||||||
|
@ -309,13 +350,15 @@ class Graphs {
|
||||||
name = name.substring(0, name.length - 1);
|
name = name.substring(0, name.length - 1);
|
||||||
for (var splitted in spl) {
|
for (var splitted in spl) {
|
||||||
var dt = splitted.split(sep.dotToLength);
|
var dt = splitted.split(sep.dotToLength);
|
||||||
dot.add(int.parse(dt[0]));
|
if (dt.length == 2) {
|
||||||
len.add(int.parse(dt[1]));
|
dot.add(int.parse(dt[0]));
|
||||||
|
len.add(int.parse(dt[1]));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Dot add = Dot.fromTwoLists(name, dot, len);
|
_dots.add(Dot.fromTwoLists(name, dot, len));
|
||||||
_dots.add(add);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_syncNum();
|
||||||
_syncNameTable();
|
_syncNameTable();
|
||||||
if (!_oriented) _fullFix();
|
if (!_oriented) _fullFix();
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,4 +9,4 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.1"
|
version: "1.0.1"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=2.14.0-178.0.dev <3.0.0"
|
dart: ">=2.14.0 <3.0.0"
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
name: graphs0
|
name: graphs0
|
||||||
description: A simple command-line application.
|
description: Application to store graph data.
|
||||||
version: 1.0.0
|
version: 0.9.0
|
||||||
# homepage: https://www.example.com
|
homepage: https://morozovad.ddns.net/lnd212/Graphs_dart
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=2.14.0-178.0.dev <3.0.0'
|
sdk: '>=2.14.0 <3.0.0'
|
||||||
|
|
||||||
|
|
||||||
# dependencies:
|
# dependencies:
|
||||||
|
|
Loading…
Reference in New Issue