From 937ad7e70937ccdc2072c1a2143170603914e82e Mon Sep 17 00:00:00 2001 From: nadezhdazueva Date: Mon, 17 Oct 2016 22:19:33 +0300 Subject: [PATCH 01/34] Add files via upload --- Calculator.java | 201 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 Calculator.java diff --git a/Calculator.java b/Calculator.java new file mode 100644 index 000000000..4bfee1bc9 --- /dev/null +++ b/Calculator.java @@ -0,0 +1,201 @@ +package my_calc; + +/** + * Created by Nadya Zueva + * при написании использована статья на e-maxx + */ + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.StringTokenizer; +import java.util.*; +import java.io.*; +import java.util.Iterator; + +public interface Calculator { + public static void main(String[] args) throws Exception { + System.out.println("Enter string:\n"); + BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); + String string; + + try { + string = read.readLine(); + string = to_polish(string); + // System.out.println(string); + System.out.println(count(string)); + } catch (Exception error) { + System.out.println(error.getMessage()); + } + } + + public static float count(String s) throws Exception { + String buffer; + float num_1 = 0; + float num_2 = 0; + + //Stack stack = new ArrayStack(); + Deque stack = new ArrayDeque(); + StringTokenizer tok = new StringTokenizer(s); + while (tok.hasMoreTokens()) { + try { + buffer = tok.nextToken().trim(); + if (oper(buffer.charAt(0))&& buffer.length() == 1) { + num_1 = stack.pop(); num_2 = stack.pop(); + switch (buffer.charAt(0)) { + case '+': { + num_2 = num_2 + num_1; + break; + } + case '-': { + num_2 = num_2 - num_1; + break; + } + case '*': { + num_2 = num_2 * num_1; + break; + } + case '/': { + num_2 = (Float)num_2 / num_1; + break; + } + + default: + throw new Exception("\nIndefinite operator\n"); + } + stack.push(num_2); + } else { + num_2 = Float.parseFloat(buffer); + stack.push(num_2); + } + } catch (Exception error) { + throw new Exception("\nIndefinite symbol\n"); + } + } + + + return stack.pop(); + } + + + //является ли символ оператором + public static boolean oper(char a) { + if (a == '+' || a == '-' || a == '*' || a == '/') { + return true; + } else { + return false; + } + } + + /*является ли символ скобкой + public static boolean brack(char a) { + if (a == '(' || a == ')') { + return true; + } + else { + return false; + } + }*/ +//является ли числом + /* public static boolean numb(char a) { + switch (a) { + case '0': { + return true; + } + case '1': { + return true; + } + case '2': { + return true; + } + case '3': { + return true; + } + case '4': { + return true; + } + case '5': { + return true; + } + case '6': { + return true; + } + case '7': { + return true; + } + case '8': { + return true; + } + case '9': { + return true; + } + } + return false; + }*/ + + //приоритет операции + public static short priority(char a) { + switch (a) { + case '*': + return 2; + case '/': + return 2; + case '+': + return 1; + case '-': + return 1; + default: + return -1; + } + } + + public static String to_polish(String input_string) throws Exception { + + char c; + char t; + StringBuilder buffer = new StringBuilder(""); + StringBuilder output = new StringBuilder(""); + + for (int i = 0; i < input_string.length(); ++i) { + c = input_string.charAt(i); + if (oper(c)) { + // System.out.println("@"); + while (buffer.length() > 0) { + t = buffer.substring(buffer.length() - 1).charAt(0); + if (oper(t) && (priority(c) <= priority(t))) { + output.append(" ").append(t).append(" "); + buffer.setLength(buffer.length() - 1); + } else { + output.append(" "); + break; + } + } + output.append(" "); + buffer.append(c); + } else if ('(' == c) { + buffer.append(c); + } else if (')' == c) { + t = buffer.substring(buffer.length() - 1).charAt(0); + while ('(' != t) { + // System.out.println("&"); + output.append(" ").append(t); + buffer.setLength(buffer.length() - 1); + t = buffer.substring(buffer.length() - 1).charAt(0); + } + buffer.setLength(buffer.length() - 1); + } else { + + output.append(c); + } + } + + while (buffer.length() > 0) { + output.append(" ").append(buffer.substring(buffer.length() - 1)); + buffer.setLength(buffer.length() - 1); + } + + return output.toString(); + } +} + From 1538f2842e45de76d10aaec38a4fe8f4c667acab Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Mon, 24 Oct 2016 01:45:59 +0300 Subject: [PATCH 02/34] c --- Calculator.java | 2 +- homework-g595-zueva/pom.xml | 28 +++ .../g595/zueva/task1/AzazaCalculator.java | 169 ++++++++++++++++++ .../g595/zueva/task1/AzazaCalculatorTest.java | 11 ++ pom.xml | 1 + 5 files changed, 210 insertions(+), 1 deletion(-) create mode 100644 homework-g595-zueva/pom.xml create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java create mode 100644 homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java diff --git a/Calculator.java b/Calculator.java index 4bfee1bc9..c31501dbd 100644 --- a/Calculator.java +++ b/Calculator.java @@ -30,7 +30,7 @@ public static void main(String[] args) throws Exception { } } - public static float count(String s) throws Exception { + public static float calculate(String s) throws Parsing Exception { String buffer; float num_1 = 0; float num_2 = 0; diff --git a/homework-g595-zueva/pom.xml b/homework-g595-zueva/pom.xml new file mode 100644 index 000000000..1b4a8b250 --- /dev/null +++ b/homework-g595-zueva/pom.xml @@ -0,0 +1,28 @@ + + + + mipt-java-2016 + ru.mipt.java2016 + 1.0.0 + + 4.0.0 + + homework-g595-zueva + + + ru.mipt.java2016 + homework-base + 1.0.0 + + + ru.mipt.java2016 + homework-tests + 1.0.0 + test + + + + + \ No newline at end of file diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java new file mode 100644 index 000000000..3320027a5 --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java @@ -0,0 +1,169 @@ +package ru.mipt.java2016.g595.zueva.task1; + +import ru.mipt.java2016.homework.base.task1.Calculator; +import ru.mipt.java2016.homework.base.task1.ParsingException; + +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.StringTokenizer; + +class AzazaCalculator implements Calculator { + + static final AzazaCalculator INSTANCE = new AzazaCalculator(); + + @Override + public double calculate(String s) throws ParsingException { + if (s == null) { + throw new ParsingException("null"); + } + if (s == ""){ + throw new ParsingException("empty string"); + } + if (s == " "){ + throw new ParsingException("empty string"); + } + for(int i = 1; i < s.length() - 1; ++i){ + if(s.charAt(i) == ' ' || s.charAt(i) == '\n' || s.charAt(i) == '\t'){ + s = s.substring(0, i - 1) + s.substring(i + 1, s.length() - 1); + } + } + if(s.charAt(0) == ' ' || s.charAt(0) == '\n' || s.charAt(0) == '\t'){ + s = s.substring(1,s.length() - 1); + } + if(s.charAt(s.length() - 1) == ' ' || s.charAt(s.length() - 1) == '\n' || s.charAt(s.length() - 1) == '\t'){ + s = s.substring(0, s.length() - 2); + } + for(int i = 0; i < s.length(); ++i) { + if(!(s.charAt(i) == '+' || s.charAt(i) == '-' || s.charAt(i) == '*' ||s.charAt(i) == '/' || s.charAt(i) == '(' + ||s.charAt(i) == ')'||s.charAt(i) == '.'||s.charAt(i) == '1' || s.charAt(i) == '2' || s.charAt(i) == '0' || + s.charAt(i) == '3' || s.charAt(i) == '4' || s.charAt(i) == '5' || s.charAt(i) == '6' || s.charAt(i) == '7' || + s.charAt(i) == '8' || s.charAt(i) == '9')){ + throw new ParsingException("Bad symbol"); + } + } + for(int i = 0; i < s.length() - 1; ++i){ + if(s.charAt(i) == '/' && s.charAt(i + 1) == '0') { + return Double.POSITIVE_INFINITY; + } + } + for(int i =0; i < s.length() - 2; ++i) { + if(s.charAt(i) == '/' && s.charAt(i + 2) == '0' && s.charAt(i + 1) == '-') { + return Double.NEGATIVE_INFINITY; + } + } + s = to_polish(s); + String buffer; + double num_1 = 0; + double num_2 = 0; + Deque stack = new ArrayDeque<>(); + StringTokenizer tok = new StringTokenizer(s); + while (tok.hasMoreTokens()) try { + buffer = tok.nextToken().trim(); + if (oper(buffer.charAt(0)) && buffer.length() == 1) { + num_1 = stack.pop(); + num_2 = stack.pop(); + switch (buffer.charAt(0)) { + case '+': { + num_2 = num_2 + num_1; + break; + } + case '-': { + num_2 = num_2 - num_1; + break; + } + case '*': { + num_2 = num_2 * num_1; + break; + } + case '/': { + num_2 = num_2 / num_1; + break; + } + + default: + throw new Exception("\nIndefinite operator\n"); + } + stack.push(num_2); + } else { + num_2 = Float.parseFloat(buffer); + stack.push(num_2); + } + } catch (Exception error) { + throw new ParsingException("\nIndefinite symbol\n"); + } + + + return stack.pop(); + } + + public static boolean oper(char a) { + if (a == '+' || a == '-' || a == '*' || a == '/') { + return true; + } else { + return false; + } + } + public static short priority(char a) { + switch (a) { + case '*': + return 2; + case '/': + return 2; + case '+': + return 1; + case '-': + return 1; + default: + return -1; + } + } + + public static String to_polish(String input_string) { + + char c; + char t; + StringBuilder buffer = new StringBuilder(""); + StringBuilder output = new StringBuilder(""); + + for (int i = 0; i < input_string.length(); ++i) { + c = input_string.charAt(i); + if (oper(c)) { + // System.out.println("@"); + while (buffer.length() > 0) { + t = buffer.substring(buffer.length() - 1).charAt(0); + if (oper(t) && (priority(c) <= priority(t))) { + output.append(" ").append(t).append(" "); + buffer.setLength(buffer.length() - 1); + } else { + output.append(" "); + break; + } + } + output.append(" "); + buffer.append(c); + } else if ('(' == c) { + buffer.append(c); + } else if (')' == c) { + t = buffer.substring(buffer.length() - 1).charAt(0); + while ('(' != t) { + // System.out.println("&"); + output.append(" ").append(t); + buffer.setLength(buffer.length() - 1); + t = buffer.substring(buffer.length() - 1).charAt(0); + } + buffer.setLength(buffer.length() - 1); + } else { + + output.append(c); + } + } + + while (buffer.length() > 0) { + output.append(" ").append(buffer.substring(buffer.length() - 1)); + buffer.setLength(buffer.length() - 1); + } + + return output.toString(); + } +} + diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java b/homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java new file mode 100644 index 000000000..d0fec2ee9 --- /dev/null +++ b/homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java @@ -0,0 +1,11 @@ +package ru.mipt.java2016.g595.zueva.task1; + + +import ru.mipt.java2016.homework.tests.task1.AbstractCalculatorTest; + +public class AzazaCalculatorTest extends AbstractCalculatorTest { + @Override + public AzazaCalculator calc() { + return AzazaCalculator.INSTANCE; + } +} diff --git a/pom.xml b/pom.xml index 53c260551..30e70c2d4 100644 --- a/pom.xml +++ b/pom.xml @@ -71,6 +71,7 @@ homework-g597-grishutin homework-g595-tkachenko homework-g597-miller + homework-g595-zueva From 4ac11626889781b8410cd315f093335f2367727a Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Mon, 24 Oct 2016 15:53:36 +0300 Subject: [PATCH 03/34] new commit --- .../ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java | 6 ++++-- .../homework/tests/task1/AbstractCalculatorTest.java | 4 ---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java index 3320027a5..e20b3293f 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java @@ -13,7 +13,7 @@ class AzazaCalculator implements Calculator { @Override public double calculate(String s) throws ParsingException { - if (s == null) { + /*if (s == null) { throw new ParsingException("null"); } if (s == ""){ @@ -50,7 +50,7 @@ public double calculate(String s) throws ParsingException { if(s.charAt(i) == '/' && s.charAt(i + 2) == '0' && s.charAt(i + 1) == '-') { return Double.NEGATIVE_INFINITY; } - } + }*/ s = to_polish(s); String buffer; double num_1 = 0; @@ -60,6 +60,7 @@ public double calculate(String s) throws ParsingException { while (tok.hasMoreTokens()) try { buffer = tok.nextToken().trim(); if (oper(buffer.charAt(0)) && buffer.length() == 1) { + System.out.println(buffer.charAt(0)); num_1 = stack.pop(); num_2 = stack.pop(); switch (buffer.charAt(0)) { @@ -90,6 +91,7 @@ public double calculate(String s) throws ParsingException { } } catch (Exception error) { throw new ParsingException("\nIndefinite symbol\n"); + } diff --git a/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task1/AbstractCalculatorTest.java b/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task1/AbstractCalculatorTest.java index 6d06e3186..b27d7c5c0 100644 --- a/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task1/AbstractCalculatorTest.java +++ b/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task1/AbstractCalculatorTest.java @@ -155,8 +155,4 @@ public void testUnaryMultiply() throws ParsingException { public void testBadNumber() throws ParsingException { tryFail("1.2.3"); } -/*<<<<<<< HEAD -======= - ->>>>>>> upstream/master*/ } \ No newline at end of file From 0c0b58e789afe2973d72bdf2979111914540204e Mon Sep 17 00:00:00 2001 From: nadezhdazueva Date: Mon, 17 Oct 2016 22:19:33 +0300 Subject: [PATCH 04/34] Add files via upload --- Calculator.java | 201 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 Calculator.java diff --git a/Calculator.java b/Calculator.java new file mode 100644 index 000000000..4bfee1bc9 --- /dev/null +++ b/Calculator.java @@ -0,0 +1,201 @@ +package my_calc; + +/** + * Created by Nadya Zueva + * при написании использована статья на e-maxx + */ + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.StringTokenizer; +import java.util.*; +import java.io.*; +import java.util.Iterator; + +public interface Calculator { + public static void main(String[] args) throws Exception { + System.out.println("Enter string:\n"); + BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); + String string; + + try { + string = read.readLine(); + string = to_polish(string); + // System.out.println(string); + System.out.println(count(string)); + } catch (Exception error) { + System.out.println(error.getMessage()); + } + } + + public static float count(String s) throws Exception { + String buffer; + float num_1 = 0; + float num_2 = 0; + + //Stack stack = new ArrayStack(); + Deque stack = new ArrayDeque(); + StringTokenizer tok = new StringTokenizer(s); + while (tok.hasMoreTokens()) { + try { + buffer = tok.nextToken().trim(); + if (oper(buffer.charAt(0))&& buffer.length() == 1) { + num_1 = stack.pop(); num_2 = stack.pop(); + switch (buffer.charAt(0)) { + case '+': { + num_2 = num_2 + num_1; + break; + } + case '-': { + num_2 = num_2 - num_1; + break; + } + case '*': { + num_2 = num_2 * num_1; + break; + } + case '/': { + num_2 = (Float)num_2 / num_1; + break; + } + + default: + throw new Exception("\nIndefinite operator\n"); + } + stack.push(num_2); + } else { + num_2 = Float.parseFloat(buffer); + stack.push(num_2); + } + } catch (Exception error) { + throw new Exception("\nIndefinite symbol\n"); + } + } + + + return stack.pop(); + } + + + //является ли символ оператором + public static boolean oper(char a) { + if (a == '+' || a == '-' || a == '*' || a == '/') { + return true; + } else { + return false; + } + } + + /*является ли символ скобкой + public static boolean brack(char a) { + if (a == '(' || a == ')') { + return true; + } + else { + return false; + } + }*/ +//является ли числом + /* public static boolean numb(char a) { + switch (a) { + case '0': { + return true; + } + case '1': { + return true; + } + case '2': { + return true; + } + case '3': { + return true; + } + case '4': { + return true; + } + case '5': { + return true; + } + case '6': { + return true; + } + case '7': { + return true; + } + case '8': { + return true; + } + case '9': { + return true; + } + } + return false; + }*/ + + //приоритет операции + public static short priority(char a) { + switch (a) { + case '*': + return 2; + case '/': + return 2; + case '+': + return 1; + case '-': + return 1; + default: + return -1; + } + } + + public static String to_polish(String input_string) throws Exception { + + char c; + char t; + StringBuilder buffer = new StringBuilder(""); + StringBuilder output = new StringBuilder(""); + + for (int i = 0; i < input_string.length(); ++i) { + c = input_string.charAt(i); + if (oper(c)) { + // System.out.println("@"); + while (buffer.length() > 0) { + t = buffer.substring(buffer.length() - 1).charAt(0); + if (oper(t) && (priority(c) <= priority(t))) { + output.append(" ").append(t).append(" "); + buffer.setLength(buffer.length() - 1); + } else { + output.append(" "); + break; + } + } + output.append(" "); + buffer.append(c); + } else if ('(' == c) { + buffer.append(c); + } else if (')' == c) { + t = buffer.substring(buffer.length() - 1).charAt(0); + while ('(' != t) { + // System.out.println("&"); + output.append(" ").append(t); + buffer.setLength(buffer.length() - 1); + t = buffer.substring(buffer.length() - 1).charAt(0); + } + buffer.setLength(buffer.length() - 1); + } else { + + output.append(c); + } + } + + while (buffer.length() > 0) { + output.append(" ").append(buffer.substring(buffer.length() - 1)); + buffer.setLength(buffer.length() - 1); + } + + return output.toString(); + } +} + From 777745d0c0544a719a1d7a0444419d8b2fb2000e Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Mon, 24 Oct 2016 01:45:59 +0300 Subject: [PATCH 05/34] c --- Calculator.java | 2 +- homework-g595-zueva/pom.xml | 28 +++ .../g595/zueva/task1/AzazaCalculator.java | 169 ++++++++++++++++++ .../g595/zueva/task1/AzazaCalculatorTest.java | 11 ++ pom.xml | 2 +- 5 files changed, 210 insertions(+), 2 deletions(-) create mode 100644 homework-g595-zueva/pom.xml create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java create mode 100644 homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java diff --git a/Calculator.java b/Calculator.java index 4bfee1bc9..c31501dbd 100644 --- a/Calculator.java +++ b/Calculator.java @@ -30,7 +30,7 @@ public static void main(String[] args) throws Exception { } } - public static float count(String s) throws Exception { + public static float calculate(String s) throws Parsing Exception { String buffer; float num_1 = 0; float num_2 = 0; diff --git a/homework-g595-zueva/pom.xml b/homework-g595-zueva/pom.xml new file mode 100644 index 000000000..1b4a8b250 --- /dev/null +++ b/homework-g595-zueva/pom.xml @@ -0,0 +1,28 @@ + + + + mipt-java-2016 + ru.mipt.java2016 + 1.0.0 + + 4.0.0 + + homework-g595-zueva + + + ru.mipt.java2016 + homework-base + 1.0.0 + + + ru.mipt.java2016 + homework-tests + 1.0.0 + test + + + + + \ No newline at end of file diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java new file mode 100644 index 000000000..3320027a5 --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java @@ -0,0 +1,169 @@ +package ru.mipt.java2016.g595.zueva.task1; + +import ru.mipt.java2016.homework.base.task1.Calculator; +import ru.mipt.java2016.homework.base.task1.ParsingException; + +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.StringTokenizer; + +class AzazaCalculator implements Calculator { + + static final AzazaCalculator INSTANCE = new AzazaCalculator(); + + @Override + public double calculate(String s) throws ParsingException { + if (s == null) { + throw new ParsingException("null"); + } + if (s == ""){ + throw new ParsingException("empty string"); + } + if (s == " "){ + throw new ParsingException("empty string"); + } + for(int i = 1; i < s.length() - 1; ++i){ + if(s.charAt(i) == ' ' || s.charAt(i) == '\n' || s.charAt(i) == '\t'){ + s = s.substring(0, i - 1) + s.substring(i + 1, s.length() - 1); + } + } + if(s.charAt(0) == ' ' || s.charAt(0) == '\n' || s.charAt(0) == '\t'){ + s = s.substring(1,s.length() - 1); + } + if(s.charAt(s.length() - 1) == ' ' || s.charAt(s.length() - 1) == '\n' || s.charAt(s.length() - 1) == '\t'){ + s = s.substring(0, s.length() - 2); + } + for(int i = 0; i < s.length(); ++i) { + if(!(s.charAt(i) == '+' || s.charAt(i) == '-' || s.charAt(i) == '*' ||s.charAt(i) == '/' || s.charAt(i) == '(' + ||s.charAt(i) == ')'||s.charAt(i) == '.'||s.charAt(i) == '1' || s.charAt(i) == '2' || s.charAt(i) == '0' || + s.charAt(i) == '3' || s.charAt(i) == '4' || s.charAt(i) == '5' || s.charAt(i) == '6' || s.charAt(i) == '7' || + s.charAt(i) == '8' || s.charAt(i) == '9')){ + throw new ParsingException("Bad symbol"); + } + } + for(int i = 0; i < s.length() - 1; ++i){ + if(s.charAt(i) == '/' && s.charAt(i + 1) == '0') { + return Double.POSITIVE_INFINITY; + } + } + for(int i =0; i < s.length() - 2; ++i) { + if(s.charAt(i) == '/' && s.charAt(i + 2) == '0' && s.charAt(i + 1) == '-') { + return Double.NEGATIVE_INFINITY; + } + } + s = to_polish(s); + String buffer; + double num_1 = 0; + double num_2 = 0; + Deque stack = new ArrayDeque<>(); + StringTokenizer tok = new StringTokenizer(s); + while (tok.hasMoreTokens()) try { + buffer = tok.nextToken().trim(); + if (oper(buffer.charAt(0)) && buffer.length() == 1) { + num_1 = stack.pop(); + num_2 = stack.pop(); + switch (buffer.charAt(0)) { + case '+': { + num_2 = num_2 + num_1; + break; + } + case '-': { + num_2 = num_2 - num_1; + break; + } + case '*': { + num_2 = num_2 * num_1; + break; + } + case '/': { + num_2 = num_2 / num_1; + break; + } + + default: + throw new Exception("\nIndefinite operator\n"); + } + stack.push(num_2); + } else { + num_2 = Float.parseFloat(buffer); + stack.push(num_2); + } + } catch (Exception error) { + throw new ParsingException("\nIndefinite symbol\n"); + } + + + return stack.pop(); + } + + public static boolean oper(char a) { + if (a == '+' || a == '-' || a == '*' || a == '/') { + return true; + } else { + return false; + } + } + public static short priority(char a) { + switch (a) { + case '*': + return 2; + case '/': + return 2; + case '+': + return 1; + case '-': + return 1; + default: + return -1; + } + } + + public static String to_polish(String input_string) { + + char c; + char t; + StringBuilder buffer = new StringBuilder(""); + StringBuilder output = new StringBuilder(""); + + for (int i = 0; i < input_string.length(); ++i) { + c = input_string.charAt(i); + if (oper(c)) { + // System.out.println("@"); + while (buffer.length() > 0) { + t = buffer.substring(buffer.length() - 1).charAt(0); + if (oper(t) && (priority(c) <= priority(t))) { + output.append(" ").append(t).append(" "); + buffer.setLength(buffer.length() - 1); + } else { + output.append(" "); + break; + } + } + output.append(" "); + buffer.append(c); + } else if ('(' == c) { + buffer.append(c); + } else if (')' == c) { + t = buffer.substring(buffer.length() - 1).charAt(0); + while ('(' != t) { + // System.out.println("&"); + output.append(" ").append(t); + buffer.setLength(buffer.length() - 1); + t = buffer.substring(buffer.length() - 1).charAt(0); + } + buffer.setLength(buffer.length() - 1); + } else { + + output.append(c); + } + } + + while (buffer.length() > 0) { + output.append(" ").append(buffer.substring(buffer.length() - 1)); + buffer.setLength(buffer.length() - 1); + } + + return output.toString(); + } +} + diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java b/homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java new file mode 100644 index 000000000..d0fec2ee9 --- /dev/null +++ b/homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java @@ -0,0 +1,11 @@ +package ru.mipt.java2016.g595.zueva.task1; + + +import ru.mipt.java2016.homework.tests.task1.AbstractCalculatorTest; + +public class AzazaCalculatorTest extends AbstractCalculatorTest { + @Override + public AzazaCalculator calc() { + return AzazaCalculator.INSTANCE; + } +} diff --git a/pom.xml b/pom.xml index 0b1bce4c9..7edd760f7 100644 --- a/pom.xml +++ b/pom.xml @@ -23,11 +23,11 @@ homework-g596-proskurina homework-g000-lavrentyev homework-g594-borodin + homework-g594-shevkunov homework-g597-vasilyev homework-g594-stepanov homework-g599a-kazakova homework-g597-markov - homework-g594-shevkunov homework-g595-kireev homework-g595-novikov homework-g597-mashurin From 846d52be7be9c885c22b1464a0c0800db353c851 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Mon, 24 Oct 2016 15:53:36 +0300 Subject: [PATCH 06/34] new commit --- .../ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java | 6 ++++-- .../homework/tests/task1/AbstractCalculatorTest.java | 4 ---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java index 3320027a5..e20b3293f 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java @@ -13,7 +13,7 @@ class AzazaCalculator implements Calculator { @Override public double calculate(String s) throws ParsingException { - if (s == null) { + /*if (s == null) { throw new ParsingException("null"); } if (s == ""){ @@ -50,7 +50,7 @@ public double calculate(String s) throws ParsingException { if(s.charAt(i) == '/' && s.charAt(i + 2) == '0' && s.charAt(i + 1) == '-') { return Double.NEGATIVE_INFINITY; } - } + }*/ s = to_polish(s); String buffer; double num_1 = 0; @@ -60,6 +60,7 @@ public double calculate(String s) throws ParsingException { while (tok.hasMoreTokens()) try { buffer = tok.nextToken().trim(); if (oper(buffer.charAt(0)) && buffer.length() == 1) { + System.out.println(buffer.charAt(0)); num_1 = stack.pop(); num_2 = stack.pop(); switch (buffer.charAt(0)) { @@ -90,6 +91,7 @@ public double calculate(String s) throws ParsingException { } } catch (Exception error) { throw new ParsingException("\nIndefinite symbol\n"); + } diff --git a/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task1/AbstractCalculatorTest.java b/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task1/AbstractCalculatorTest.java index 6d06e3186..b27d7c5c0 100644 --- a/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task1/AbstractCalculatorTest.java +++ b/homework-tests/src/main/java/ru/mipt/java2016/homework/tests/task1/AbstractCalculatorTest.java @@ -155,8 +155,4 @@ public void testUnaryMultiply() throws ParsingException { public void testBadNumber() throws ParsingException { tryFail("1.2.3"); } -/*<<<<<<< HEAD -======= - ->>>>>>> upstream/master*/ } \ No newline at end of file From c5e4da6aa65fe950e00709a7cab4b54807369c42 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Mon, 31 Oct 2016 20:08:18 +0300 Subject: [PATCH 07/34] Add solved task 2 --- homework-g595-zueva/pom.xml | 1 - .../g595/zueva/task2/task2/My_KV_Storage.java | 123 ++++++++++++++++++ .../g595/zueva/task2/task2/Serializer1.java | 15 +++ .../task2/task2/Specified_serializers.java | 79 +++++++++++ .../g595/zueva/task2/My_KV_StorageTest.java | 55 ++++++++ 5 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializer1.java create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java create mode 100644 homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java diff --git a/homework-g595-zueva/pom.xml b/homework-g595-zueva/pom.xml index 1b4a8b250..ee669b0d6 100644 --- a/homework-g595-zueva/pom.xml +++ b/homework-g595-zueva/pom.xml @@ -20,7 +20,6 @@ ru.mipt.java2016 homework-tests 1.0.0 - test diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java new file mode 100644 index 000000000..dd0a4a8e8 --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java @@ -0,0 +1,123 @@ +package ru.mipt.java2016.homework.g595.zueva.task2.task2; + +/*сreated by Nadya*/ + +import org.apache.commons.io.IOExceptionWithCause; +import ru.mipt.java2016.homework.base.task2.KeyValueStorage; +import ru.mipt.java2016.homework.g595.zueva.task2.task2.Serializer; +import java.util.Iterator; +import java.util.Map; +import java.io.*; +import java.util.HashMap; + + +public class My_KV_Storage implements KeyValueStorage { + private static final String VALIDATION_STRING; + + static { + VALIDATION_STRING = "My strange storage"; + } + + public String FileName; + public HashMap CurrentStorage; + public Serializer keySerializer; + public Serializer valueSerializer; + public boolean ifOpen = false; + + /*Конструктор класс хранилища*/ + public My_KV_Storage(String newFileName, + Serializer newKeySerialisation, + Serializer newValueSerialisation) throws Exception { + keySerializer = newKeySerialisation; + valueSerializer = newValueSerialisation; + FileName = newFileName + "/note.txt"; + CurrentStorage = new HashMap(); + ifOpen = true; + /*проверка, возможно ли открыть и создать файл*/ + File destination = new File(FileName); + if (!destination.exists()) { + destination.createNewFile(); + + try (DataOutputStream out = new DataOutputStream(new FileOutputStream(FileName))) { + out.writeUTF(VALIDATION_STRING); + out.writeInt(0b0); + } catch (Exception e) { + throw new Exception("Cannot write to file"); + } + } + /* Существует ли наша валидирующая строка в файле && проверка, возможно ли читать из файла*/ + try (DataInputStream in = new DataInputStream(new FileInputStream(FileName))) { + if (!in.readUTF().equals(VALIDATION_STRING)) { + throw new IllegalStateException("Unknown validation"); + } + int quantity = in.readInt(); + for (int i = 0; i < quantity; ++i) { + + K keyToInsert = keySerializer.readFromStream(in); + V valueToInsert = valueSerializer.readFromStream(in); + CurrentStorage.put(keyToInsert, valueToInsert); + } + } catch (Exception exception) { + throw new Exception("Cannot read from file"); + } + } + @Override + public void close() throws IOExceptionWithCause { + isFileClosed(); + try + (DataOutputStream out = new DataOutputStream(new FileOutputStream(FileName))) { + out.writeUTF(VALIDATION_STRING); + out.writeInt(CurrentStorage.size()); + for (Map.Entry i : CurrentStorage.entrySet()) { + keySerializer.writeToStream(out, i.getKey()); + valueSerializer.writeToStream(out, i.getValue()); + } + ifOpen = false; + } catch (Exception e) { + throw new IllegalStateException("Failed to save and close storage"); + } + } + @Override + public V read(K key) { + isFileClosed(); + return CurrentStorage.get(key); + } + + @Override + public boolean exists(K key) { + isFileClosed(); + return CurrentStorage.keySet().contains(key); + } + + @Override + public void write(K key, V value) { + isFileClosed(); + CurrentStorage.put(key, value); + } + + @Override + public void delete(K key) { + isFileClosed(); + CurrentStorage.remove(key); + } + + @Override + public Iterator readKeys() { + isFileClosed(); + return CurrentStorage.keySet().iterator(); + } + + @Override + public int size() { + isFileClosed(); + return CurrentStorage.size(); + } + + + public void isFileClosed() { + if (!ifOpen) { + throw new IllegalStateException("Storage had been already closed"); + } + } +} + diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializer1.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializer1.java new file mode 100644 index 000000000..ee9e7ae26 --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializer1.java @@ -0,0 +1,15 @@ +package ru.mipt.java2016.homework.g595.zueva.task2.task2; + +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.IOException; + +/** + * Created by Nadya on 31.10.2016. + */ +interface Serializer { + void writeToStream(DataOutputStream out, T value) throws Exception; + + T readFromStream(DataInputStream in) throws Exception; +} diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java new file mode 100644 index 000000000..a4caff4b8 --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java @@ -0,0 +1,79 @@ +package ru.mipt.java2016.homework.g595.zueva.task2.task2; + +/** + * Created by Nadya on 30.10.2016. + */ +import ru.mipt.java2016.homework.tests.task2.Student; +import ru.mipt.java2016.homework.tests.task2.StudentKey; + +import java.io.*; +import java.util.Date; + +public class Specified_serializers{ + +public static class SerialiserInt implements Serializer { + + + public void writeToStream(DataOutputStream out, Integer value) throws Exception { + out.writeInt(value); + } + + public Integer readFromStream(DataInputStream in) throws Exception { + return in.readInt(); + } +} + + +public static class SerializerString implements Serializer { + + public void writeToStream(DataOutputStream out, String value) throws IOException { + out.writeUTF(value); + } + + public String readFromStream(DataInputStream in) throws IOException { + return in.readUTF(); + } +} + + public static class SerializerDouble implements Serializer { + + public void writeToStream(DataOutputStream out, Double value) throws Exception { + out.writeDouble(value); + } + + @Override + public Double readFromStream(DataInputStream in) throws Exception { + return in.readDouble(); + } + } + + public static class SerializerStudentKey implements Serializer { + + public void writeToStream(DataOutputStream out, StudentKey value) throws Exception { + out.writeInt(value.getGroupId()); + out.writeUTF(value.getName()); + } + + public StudentKey readFromStream(DataInputStream in) throws Exception { + return new StudentKey(in.readInt(), in.readUTF()); + } + } + + public static class SerializerStudent implements Serializer { + + public void writeToStream(DataOutputStream out, Student value) throws Exception { + out.writeInt(value.getGroupId()); + out.writeUTF(value.getName()); + out.writeUTF(value.getHometown()); + out.writeLong(value.getBirthDate().getTime()); + out.writeBoolean(value.isHasDormitory()); + out.writeDouble(value.getAverageScore()); + + } + + public Student readFromStream(DataInputStream in) throws Exception { + return new Student(in.readInt(), in.readUTF(), in.readUTF(), + new Date(in.readLong()), in.readBoolean(), in.readDouble()); + } + } +} diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java b/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java new file mode 100644 index 000000000..4db352dcd --- /dev/null +++ b/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java @@ -0,0 +1,55 @@ +package ru.mipt.java2016.homework.g595.zueva.task2; + +import ru.mipt.java2016.homework.base.task2.KeyValueStorage; +import ru.mipt.java2016.homework.tests.task2.AbstractSingleFileStorageTest; +import ru.mipt.java2016.homework.tests.task2.Student; +import ru.mipt.java2016.homework.tests.task2.StudentKey; +import ru.mipt.java2016.homework.g595.zueva.task2.task2.Specified_serializers; +import ru.mipt.java2016.homework.g595.zueva.task2.task2.My_KV_Storage; +import java.io.IOException; +import java.io.*; + +/** + * Created by maria on 26.10.16. + */ +public class My_KV_StorageTest extends AbstractSingleFileStorageTest { + + @Override + protected KeyValueStorage buildStringsStorage(String path) { + My_KV_Storage result = null; + Specified_serializers.SerializerString a; + Specified_serializers.SerializerString b; + try { + result = new My_KV_Storage(path, new Specified_serializers.SerializerString(), + new Specified_serializers.SerializerString()); + } catch (Exception except) { + System.out.println(except.getMessage()); + } + return result; + } + + + @Override + protected KeyValueStorage buildNumbersStorage(String path) { + My_KV_Storage result = null; + try { + result = new My_KV_Storage(path, new Specified_serializers.SerialiserInt(), + new Specified_serializers.SerializerDouble()); + } catch (Exception e) { + System.out.println(e.getMessage()); + } + return result; + } + + @Override + protected KeyValueStorage buildPojoStorage(String path) { + My_KV_Storage result = null; + try { + result = new My_KV_Storage(path, new Specified_serializers.SerializerStudentKey(), + new Specified_serializers.SerializerStudent()); + } catch (Exception ex) { + System.out.println(ex.getMessage()); + } + return result; + } +} From 366463ebcda248b3317ace853169c7caaac711b4 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Mon, 31 Oct 2016 20:25:28 +0300 Subject: [PATCH 08/34] Add solved task 2 --- .../homework/base/task2/KeyValueStorage.java | 2 + .../g595/zueva/task1/AzazaCalculator.java | 171 ------------------ .../g595/zueva/task1/AzazaCalculatorTest.java | 11 -- java/io/annotations.xml | 5 + pom.xml | 1 + 5 files changed, 8 insertions(+), 182 deletions(-) delete mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java delete mode 100644 homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java create mode 100644 java/io/annotations.xml diff --git a/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java b/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java index bab3d8d97..7d22a55cb 100644 --- a/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java +++ b/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java @@ -14,6 +14,8 @@ * @since 04.10.16 */ public interface KeyValueStorage extends Closeable { + void isFileClosed(); + /** * Возвращает значение для данного ключа, если оно есть в хранилище. * Иначе возвращает null. diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java deleted file mode 100644 index e20b3293f..000000000 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java +++ /dev/null @@ -1,171 +0,0 @@ -package ru.mipt.java2016.g595.zueva.task1; - -import ru.mipt.java2016.homework.base.task1.Calculator; -import ru.mipt.java2016.homework.base.task1.ParsingException; - -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.StringTokenizer; - -class AzazaCalculator implements Calculator { - - static final AzazaCalculator INSTANCE = new AzazaCalculator(); - - @Override - public double calculate(String s) throws ParsingException { - /*if (s == null) { - throw new ParsingException("null"); - } - if (s == ""){ - throw new ParsingException("empty string"); - } - if (s == " "){ - throw new ParsingException("empty string"); - } - for(int i = 1; i < s.length() - 1; ++i){ - if(s.charAt(i) == ' ' || s.charAt(i) == '\n' || s.charAt(i) == '\t'){ - s = s.substring(0, i - 1) + s.substring(i + 1, s.length() - 1); - } - } - if(s.charAt(0) == ' ' || s.charAt(0) == '\n' || s.charAt(0) == '\t'){ - s = s.substring(1,s.length() - 1); - } - if(s.charAt(s.length() - 1) == ' ' || s.charAt(s.length() - 1) == '\n' || s.charAt(s.length() - 1) == '\t'){ - s = s.substring(0, s.length() - 2); - } - for(int i = 0; i < s.length(); ++i) { - if(!(s.charAt(i) == '+' || s.charAt(i) == '-' || s.charAt(i) == '*' ||s.charAt(i) == '/' || s.charAt(i) == '(' - ||s.charAt(i) == ')'||s.charAt(i) == '.'||s.charAt(i) == '1' || s.charAt(i) == '2' || s.charAt(i) == '0' || - s.charAt(i) == '3' || s.charAt(i) == '4' || s.charAt(i) == '5' || s.charAt(i) == '6' || s.charAt(i) == '7' || - s.charAt(i) == '8' || s.charAt(i) == '9')){ - throw new ParsingException("Bad symbol"); - } - } - for(int i = 0; i < s.length() - 1; ++i){ - if(s.charAt(i) == '/' && s.charAt(i + 1) == '0') { - return Double.POSITIVE_INFINITY; - } - } - for(int i =0; i < s.length() - 2; ++i) { - if(s.charAt(i) == '/' && s.charAt(i + 2) == '0' && s.charAt(i + 1) == '-') { - return Double.NEGATIVE_INFINITY; - } - }*/ - s = to_polish(s); - String buffer; - double num_1 = 0; - double num_2 = 0; - Deque stack = new ArrayDeque<>(); - StringTokenizer tok = new StringTokenizer(s); - while (tok.hasMoreTokens()) try { - buffer = tok.nextToken().trim(); - if (oper(buffer.charAt(0)) && buffer.length() == 1) { - System.out.println(buffer.charAt(0)); - num_1 = stack.pop(); - num_2 = stack.pop(); - switch (buffer.charAt(0)) { - case '+': { - num_2 = num_2 + num_1; - break; - } - case '-': { - num_2 = num_2 - num_1; - break; - } - case '*': { - num_2 = num_2 * num_1; - break; - } - case '/': { - num_2 = num_2 / num_1; - break; - } - - default: - throw new Exception("\nIndefinite operator\n"); - } - stack.push(num_2); - } else { - num_2 = Float.parseFloat(buffer); - stack.push(num_2); - } - } catch (Exception error) { - throw new ParsingException("\nIndefinite symbol\n"); - - } - - - return stack.pop(); - } - - public static boolean oper(char a) { - if (a == '+' || a == '-' || a == '*' || a == '/') { - return true; - } else { - return false; - } - } - public static short priority(char a) { - switch (a) { - case '*': - return 2; - case '/': - return 2; - case '+': - return 1; - case '-': - return 1; - default: - return -1; - } - } - - public static String to_polish(String input_string) { - - char c; - char t; - StringBuilder buffer = new StringBuilder(""); - StringBuilder output = new StringBuilder(""); - - for (int i = 0; i < input_string.length(); ++i) { - c = input_string.charAt(i); - if (oper(c)) { - // System.out.println("@"); - while (buffer.length() > 0) { - t = buffer.substring(buffer.length() - 1).charAt(0); - if (oper(t) && (priority(c) <= priority(t))) { - output.append(" ").append(t).append(" "); - buffer.setLength(buffer.length() - 1); - } else { - output.append(" "); - break; - } - } - output.append(" "); - buffer.append(c); - } else if ('(' == c) { - buffer.append(c); - } else if (')' == c) { - t = buffer.substring(buffer.length() - 1).charAt(0); - while ('(' != t) { - // System.out.println("&"); - output.append(" ").append(t); - buffer.setLength(buffer.length() - 1); - t = buffer.substring(buffer.length() - 1).charAt(0); - } - buffer.setLength(buffer.length() - 1); - } else { - - output.append(c); - } - } - - while (buffer.length() > 0) { - output.append(" ").append(buffer.substring(buffer.length() - 1)); - buffer.setLength(buffer.length() - 1); - } - - return output.toString(); - } -} - diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java b/homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java deleted file mode 100644 index d0fec2ee9..000000000 --- a/homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java +++ /dev/null @@ -1,11 +0,0 @@ -package ru.mipt.java2016.g595.zueva.task1; - - -import ru.mipt.java2016.homework.tests.task1.AbstractCalculatorTest; - -public class AzazaCalculatorTest extends AbstractCalculatorTest { - @Override - public AzazaCalculator calc() { - return AzazaCalculator.INSTANCE; - } -} diff --git a/java/io/annotations.xml b/java/io/annotations.xml new file mode 100644 index 000000000..b088ffd48 --- /dev/null +++ b/java/io/annotations.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 7edd760f7..7d80019fb 100644 --- a/pom.xml +++ b/pom.xml @@ -87,6 +87,7 @@ homework-g596-grebenshchikova homework-g597-kochukov workshop-materials + homework-g595-zueva From b7b08a5e1554d85b3b524d1002944bf3e937bd99 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Mon, 31 Oct 2016 21:03:36 +0300 Subject: [PATCH 09/34] fix global pom file --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 53c260551..30e70c2d4 100644 --- a/pom.xml +++ b/pom.xml @@ -71,6 +71,7 @@ homework-g597-grishutin homework-g595-tkachenko homework-g597-miller + homework-g595-zueva From f647630f2138e5dfc196c96ddc528aa697a7dc91 Mon Sep 17 00:00:00 2001 From: nadezhdazueva Date: Tue, 1 Nov 2016 00:39:29 +0300 Subject: [PATCH 10/34] Update My_KV_Storage.java --- .../g595/zueva/task2/task2/My_KV_Storage.java | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java index dd0a4a8e8..af7e0c0b6 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java @@ -1,48 +1,53 @@ -package ru.mipt.java2016.homework.g595.zueva.task2.task2; +package ru.mipt.java2016.homework.g595.zueva.task2; -/*сreated by Nadya*/ +/*сreated by nestyme*/ import org.apache.commons.io.IOExceptionWithCause; import ru.mipt.java2016.homework.base.task2.KeyValueStorage; -import ru.mipt.java2016.homework.g595.zueva.task2.task2.Serializer; +import ru.mipt.java2016.homework.g595.zueva.task2.Serializer; import java.util.Iterator; import java.util.Map; import java.io.*; import java.util.HashMap; -public class My_KV_Storage implements KeyValueStorage { +public class MyKVStorage implements KeyValueStorage { private static final String VALIDATION_STRING; static { VALIDATION_STRING = "My strange storage"; } - public String FileName; + private String FileName; public HashMap CurrentStorage; public Serializer keySerializer; public Serializer valueSerializer; public boolean ifOpen = false; /*Конструктор класс хранилища*/ - public My_KV_Storage(String newFileName, - Serializer newKeySerialisation, - Serializer newValueSerialisation) throws Exception { + + public MyKVStorage(String newFileName, + Serializer newKeySerialisation, + Serializer newValueSerialisation) throws Exception { keySerializer = newKeySerialisation; valueSerializer = newValueSerialisation; FileName = newFileName + "/note.txt"; CurrentStorage = new HashMap(); ifOpen = true; + /*проверка, возможно ли открыть и создать файл*/ + File destination = new File(FileName); if (!destination.exists()) { destination.createNewFile(); try (DataOutputStream out = new DataOutputStream(new FileOutputStream(FileName))) { + out.writeUTF(VALIDATION_STRING); out.writeInt(0b0); + } catch (Exception e) { - throw new Exception("Cannot write to file"); + throw new RuntimeException("Cannot write to file"); } } /* Существует ли наша валидирующая строка в файле && проверка, возможно ли читать из файла*/ @@ -58,23 +63,26 @@ public My_KV_Storage(String newFileName, CurrentStorage.put(keyToInsert, valueToInsert); } } catch (Exception exception) { - throw new Exception("Cannot read from file"); + throw new RuntimeException("Cannot read from file"); } } @Override - public void close() throws IOExceptionWithCause { + public void close() throws IOException { isFileClosed(); try (DataOutputStream out = new DataOutputStream(new FileOutputStream(FileName))) { out.writeUTF(VALIDATION_STRING); out.writeInt(CurrentStorage.size()); for (Map.Entry i : CurrentStorage.entrySet()) { + keySerializer.writeToStream(out, i.getKey()); valueSerializer.writeToStream(out, i.getValue()); + } ifOpen = false; + } catch (Exception e) { - throw new IllegalStateException("Failed to save and close storage"); + e.printStackTrace(); } } @Override From 59eea6080611498427077c0e12ae1f652aaeeacf Mon Sep 17 00:00:00 2001 From: nadezhdazueva Date: Tue, 1 Nov 2016 00:39:56 +0300 Subject: [PATCH 11/34] Update Serializer1.java --- .../homework/g595/zueva/task2/task2/Serializer1.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializer1.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializer1.java index ee9e7ae26..d928cc134 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializer1.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializer1.java @@ -1,4 +1,4 @@ -package ru.mipt.java2016.homework.g595.zueva.task2.task2; +package ru.mipt.java2016.homework.g595.zueva.task2; import java.io.DataInputStream; import java.io.DataOutput; @@ -6,10 +6,10 @@ import java.io.IOException; /** - * Created by Nadya on 31.10.2016. + * Created by nestyme on 31.10.2016. */ interface Serializer { - void writeToStream(DataOutputStream out, T value) throws Exception; + void writeToStream(DataOutputStream out, T value)throws Exception; T readFromStream(DataInputStream in) throws Exception; } From d08e1c060ee8722bb64a1d96582692e7cb31eb04 Mon Sep 17 00:00:00 2001 From: nadezhdazueva Date: Tue, 1 Nov 2016 00:40:22 +0300 Subject: [PATCH 12/34] Update Specified_serializers.java --- .../task2/task2/Specified_serializers.java | 50 ++++++++++--------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java index a4caff4b8..d16ee1c49 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java @@ -1,7 +1,7 @@ -package ru.mipt.java2016.homework.g595.zueva.task2.task2; +package ru.mipt.java2016.homework.g595.zueva.task2; /** - * Created by Nadya on 30.10.2016. + * Created by nestyme on 30.10.2016. */ import ru.mipt.java2016.homework.tests.task2.Student; import ru.mipt.java2016.homework.tests.task2.StudentKey; @@ -11,57 +11,60 @@ public class Specified_serializers{ -public static class SerialiserInt implements Serializer { + public static class SerialiserInt implements Serializer { - public void writeToStream(DataOutputStream out, Integer value) throws Exception { - out.writeInt(value); - } + public void writeToStream(DataOutputStream out, Integer value) throws Exception { - public Integer readFromStream(DataInputStream in) throws Exception { - return in.readInt(); - } -} + out.writeInt(value); + } -public static class SerializerString implements Serializer { + public Integer readFromStream(DataInputStream in) throws Exception { - public void writeToStream(DataOutputStream out, String value) throws IOException { - out.writeUTF(value); + return in.readInt(); + } } - public String readFromStream(DataInputStream in) throws IOException { - return in.readUTF(); + + public static class SerializerString implements Serializer { + + public void writeToStream(DataOutputStream out, String value) throws IOException { + out.writeUTF(value); + } + + public String readFromStream(DataInputStream in) throws IOException { + return in.readUTF(); + } } -} public static class SerializerDouble implements Serializer { - public void writeToStream(DataOutputStream out, Double value) throws Exception { + public void writeToStream(DataOutputStream out, Double value) throws IOException { out.writeDouble(value); } @Override - public Double readFromStream(DataInputStream in) throws Exception { + public Double readFromStream(DataInputStream in) throws IOException { return in.readDouble(); } } public static class SerializerStudentKey implements Serializer { - public void writeToStream(DataOutputStream out, StudentKey value) throws Exception { + public void writeToStream(DataOutputStream out, StudentKey value) throws IOException { out.writeInt(value.getGroupId()); out.writeUTF(value.getName()); } - public StudentKey readFromStream(DataInputStream in) throws Exception { + public StudentKey readFromStream(DataInputStream in) throws IOException { return new StudentKey(in.readInt(), in.readUTF()); } } public static class SerializerStudent implements Serializer { - public void writeToStream(DataOutputStream out, Student value) throws Exception { + public void writeToStream(DataOutputStream out, Student value) throws IOException { out.writeInt(value.getGroupId()); out.writeUTF(value.getName()); out.writeUTF(value.getHometown()); @@ -71,9 +74,10 @@ public void writeToStream(DataOutputStream out, Student value) throws Exception } - public Student readFromStream(DataInputStream in) throws Exception { + public Student readFromStream(DataInputStream in) throws IOException { return new Student(in.readInt(), in.readUTF(), in.readUTF(), - new Date(in.readLong()), in.readBoolean(), in.readDouble()); + new Date(in.readLong()), in.readBoolean(), + in.readDouble()); } } } From 95f93f0c3d4019e040ac3eb282305f2a297b44d5 Mon Sep 17 00:00:00 2001 From: nadezhdazueva Date: Tue, 1 Nov 2016 00:41:00 +0300 Subject: [PATCH 13/34] Update My_KV_StorageTest.java --- .../g595/zueva/task2/My_KV_StorageTest.java | 59 +++++++++---------- 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java b/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java index 4db352dcd..ceca1666b 100644 --- a/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java +++ b/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java @@ -1,55 +1,50 @@ package ru.mipt.java2016.homework.g595.zueva.task2; - +/*created by nestyme on 31.10.16*/ import ru.mipt.java2016.homework.base.task2.KeyValueStorage; import ru.mipt.java2016.homework.tests.task2.AbstractSingleFileStorageTest; import ru.mipt.java2016.homework.tests.task2.Student; import ru.mipt.java2016.homework.tests.task2.StudentKey; -import ru.mipt.java2016.homework.g595.zueva.task2.task2.Specified_serializers; -import ru.mipt.java2016.homework.g595.zueva.task2.task2.My_KV_Storage; -import java.io.IOException; -import java.io.*; -/** - * Created by maria on 26.10.16. - */ + public class My_KV_StorageTest extends AbstractSingleFileStorageTest { @Override - protected KeyValueStorage buildStringsStorage(String path) { - My_KV_Storage result = null; - Specified_serializers.SerializerString a; - Specified_serializers.SerializerString b; + public KeyValueStorage buildNumbersStorage(String path) { + MyKVStorage answer1 = null; try { - result = new My_KV_Storage(path, new Specified_serializers.SerializerString(), - new Specified_serializers.SerializerString()); - } catch (Exception except) { - System.out.println(except.getMessage()); + answer1 = new MyKVStorage(path, new Specified_serializers.SerialiserInt(), + new Specified_serializers.SerializerDouble()); + } catch (Exception exception) { + System.out.println(exception.getMessage()); } - return result; + return answer1; } - @Override - protected KeyValueStorage buildNumbersStorage(String path) { - My_KV_Storage result = null; + public KeyValueStorage buildPojoStorage(String path) { + MyKVStorage answer2 = null; try { - result = new My_KV_Storage(path, new Specified_serializers.SerialiserInt(), - new Specified_serializers.SerializerDouble()); - } catch (Exception e) { - System.out.println(e.getMessage()); + answer2 = new MyKVStorage(path, new Specified_serializers.SerializerStudentKey(), + new Specified_serializers.SerializerStudent()); + } catch (Exception exception) { + System.out.println(exception.getMessage()); } - return result; + return answer2; } @Override - protected KeyValueStorage buildPojoStorage(String path) { - My_KV_Storage result = null; + public KeyValueStorage buildStringsStorage(String path) { + Specified_serializers.SerializerString a; + Specified_serializers.SerializerString b; + MyKVStorage answer3 = null; try { - result = new My_KV_Storage(path, new Specified_serializers.SerializerStudentKey(), - new Specified_serializers.SerializerStudent()); - } catch (Exception ex) { - System.out.println(ex.getMessage()); + answer3 = new MyKVStorage(path, new Specified_serializers.SerializerString(), + new Specified_serializers.SerializerString()); + } catch (Exception exception) { + System.out.println(exception.getMessage()); } - return result; + return answer3; } } + + From a1f53179635fecae34118d53c0ef8656c250ab9d Mon Sep 17 00:00:00 2001 From: nadezhdazueva Date: Tue, 1 Nov 2016 00:57:10 +0300 Subject: [PATCH 14/34] Update My_KV_StorageTest.java --- .../homework/g595/zueva/task2/My_KV_StorageTest.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java b/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java index ceca1666b..21a722fff 100644 --- a/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java +++ b/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java @@ -5,6 +5,8 @@ import ru.mipt.java2016.homework.tests.task2.Student; import ru.mipt.java2016.homework.tests.task2.StudentKey; +import java.io.IOException; + public class My_KV_StorageTest extends AbstractSingleFileStorageTest { @@ -14,7 +16,7 @@ public KeyValueStorage buildNumbersStorage(String path) { try { answer1 = new MyKVStorage(path, new Specified_serializers.SerialiserInt(), new Specified_serializers.SerializerDouble()); - } catch (Exception exception) { + } catch (IOException exception) { System.out.println(exception.getMessage()); } return answer1; @@ -26,7 +28,7 @@ public KeyValueStorage buildPojoStorage(String path) { try { answer2 = new MyKVStorage(path, new Specified_serializers.SerializerStudentKey(), new Specified_serializers.SerializerStudent()); - } catch (Exception exception) { + } catch (IOException exception) { System.out.println(exception.getMessage()); } return answer2; @@ -40,7 +42,7 @@ public KeyValueStorage buildStringsStorage(String path) { try { answer3 = new MyKVStorage(path, new Specified_serializers.SerializerString(), new Specified_serializers.SerializerString()); - } catch (Exception exception) { + } catch (IOException exception) { System.out.println(exception.getMessage()); } return answer3; From 7a8fc8decebc4e3b2ab9e61871da668a02e9ab29 Mon Sep 17 00:00:00 2001 From: nadezhdazueva Date: Tue, 1 Nov 2016 00:57:44 +0300 Subject: [PATCH 15/34] Update My_KV_Storage.java --- .../homework/g595/zueva/task2/task2/My_KV_Storage.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java index af7e0c0b6..40f2e4f95 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java @@ -28,7 +28,7 @@ public class MyKVStorage implements KeyValueStorage { public MyKVStorage(String newFileName, Serializer newKeySerialisation, - Serializer newValueSerialisation) throws Exception { + Serializer newValueSerialisation) throws IOException { keySerializer = newKeySerialisation; valueSerializer = newValueSerialisation; FileName = newFileName + "/note.txt"; @@ -47,7 +47,7 @@ public MyKVStorage(String newFileName, out.writeInt(0b0); } catch (Exception e) { - throw new RuntimeException("Cannot write to file"); + throw new IllegalStateException("Cannot write to file"); } } /* Существует ли наша валидирующая строка в файле && проверка, возможно ли читать из файла*/ @@ -63,7 +63,7 @@ public MyKVStorage(String newFileName, CurrentStorage.put(keyToInsert, valueToInsert); } } catch (Exception exception) { - throw new RuntimeException("Cannot read from file"); + throw new IllegalStateException("Cannot read from file"); } } @Override From d8e41b127265988ca90c96a2369b7b674ca9c42f Mon Sep 17 00:00:00 2001 From: nadezhdazueva Date: Tue, 1 Nov 2016 00:58:09 +0300 Subject: [PATCH 16/34] Update Serializer1.java --- .../java2016/homework/g595/zueva/task2/task2/Serializer1.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializer1.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializer1.java index d928cc134..d30d3a839 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializer1.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializer1.java @@ -9,7 +9,7 @@ * Created by nestyme on 31.10.2016. */ interface Serializer { - void writeToStream(DataOutputStream out, T value)throws Exception; + void writeToStream(DataOutputStream out, T value)throws IOException; - T readFromStream(DataInputStream in) throws Exception; + T readFromStream(DataInputStream in) throws IOException; } From b813a040ce4575f006f682c0f02e4246572d2fba Mon Sep 17 00:00:00 2001 From: nadezhdazueva Date: Tue, 1 Nov 2016 00:58:28 +0300 Subject: [PATCH 17/34] Update Specified_serializers.java --- .../g595/zueva/task2/task2/Specified_serializers.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java index d16ee1c49..51824c589 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java @@ -14,13 +14,13 @@ public class Specified_serializers{ public static class SerialiserInt implements Serializer { - public void writeToStream(DataOutputStream out, Integer value) throws Exception { + public void writeToStream(DataOutputStream out, Integer value) throws IOException { out.writeInt(value); } - public Integer readFromStream(DataInputStream in) throws Exception { + public Integer readFromStream(DataInputStream in) throws IOException { return in.readInt(); } From c9e5a7b452b25d380fbe255388c7da07adb0a1b6 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Wed, 9 Nov 2016 01:35:51 +0300 Subject: [PATCH 18/34] add my solution again --- homework-g595-zueva/pom.xml | 4 ++-- .../task2/{task2/My_KV_Storage.java => MyKVStorage.java} | 1 - .../homework/g595/zueva/task2/{task2 => }/Serializer1.java | 0 .../g595/zueva/task2/{task2 => }/Specified_serializers.java | 6 ++++-- 4 files changed, 6 insertions(+), 5 deletions(-) rename homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/{task2/My_KV_Storage.java => MyKVStorage.java} (98%) rename homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/{task2 => }/Serializer1.java (100%) rename homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/{task2 => }/Specified_serializers.java (99%) diff --git a/homework-g595-zueva/pom.xml b/homework-g595-zueva/pom.xml index 1b4a8b250..d6686b501 100644 --- a/homework-g595-zueva/pom.xml +++ b/homework-g595-zueva/pom.xml @@ -10,19 +10,19 @@ 4.0.0 homework-g595-zueva + ru.mipt.java2016 homework-base 1.0.0 + ru.mipt.java2016 homework-tests 1.0.0 - test - \ No newline at end of file diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java similarity index 98% rename from homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java rename to homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java index 40f2e4f95..70e1b3e72 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/My_KV_Storage.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java @@ -2,7 +2,6 @@ /*сreated by nestyme*/ -import org.apache.commons.io.IOExceptionWithCause; import ru.mipt.java2016.homework.base.task2.KeyValueStorage; import ru.mipt.java2016.homework.g595.zueva.task2.Serializer; import java.util.Iterator; diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializer1.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializer1.java similarity index 100% rename from homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializer1.java rename to homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializer1.java diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Specified_serializers.java similarity index 99% rename from homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java rename to homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Specified_serializers.java index 51824c589..5aa312c8a 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Specified_serializers.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Specified_serializers.java @@ -3,11 +3,13 @@ /** * Created by nestyme on 30.10.2016. */ -import ru.mipt.java2016.homework.tests.task2.Student; -import ru.mipt.java2016.homework.tests.task2.StudentKey; + import java.io.*; import java.util.Date; +import ru.mipt.java2016.homework.tests.task2.Student; +import ru.mipt.java2016.homework.tests.task2.StudentKey; + public class Specified_serializers{ From 935a957bcf61a53c979e7caa863ec090edc35fce Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Wed, 9 Nov 2016 01:56:39 +0300 Subject: [PATCH 19/34] Fixed pom.xml --- pom.xml | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 30e70c2d4..6d417c92d 100644 --- a/pom.xml +++ b/pom.xml @@ -14,16 +14,21 @@ homework-base homework-tests + homework-g597-povarnitsyn homework-g596-kupriyanov homework-g595-kryloff + homework-g595-zueva homework-g596-kravets homework-g596-litvinov + homework-g594-kozlov + homework-g596-proskurina homework-g000-lavrentyev homework-g594-borodin - homework-g594-shevkunov homework-g597-vasilyev - homework-g594-kozlov homework-g594-stepanov + homework-g599a-kazakova + homework-g597-markov + homework-g594-shevkunov homework-g595-kireev homework-g595-novikov homework-g597-mashurin @@ -38,7 +43,9 @@ homework-g595-romanenko homework-g595-gusarova homework-g596-fattakhetdinov + homework-g596-lapa homework-g597-moiseev + homework-g594-plahtinskiy homework-g597-shirokova homework-g595-belyh homework-g594-vishnyakova @@ -48,30 +55,41 @@ homework-g594-glebov homework-g594-petrov homework-g597-kozlov + homework-g597-komarov homework-g597-dmitrieva + homework-g596-ivanova homework-g595-popovkin homework-g594-anukhin homework-g597-kasimova - homework-g596-ivanova homework-g595-turumtaev homework-g595-ulyanin homework-g595-iksanov homework-g595-nosareva homework-g595-proskurin homework-g594-sharuev + homework-g596-bystrov homework-g594-rubanenko homework-g594-islamov homework-g595-rodin + homework-g597-nasretdinov homework-g595-murzin + homework-g594-nevstruev homework-g595-yakusheva + homework-g596-stepanova homework-g597-spirin + homework-g597-kirilenko homework-g597-bogdanov homework-g596-egorov homework-g597-zakharkin homework-g597-grishutin homework-g595-tkachenko homework-g597-miller - homework-g595-zueva + homework-g596-pockonechny + homework-g597-smirnova + homework-g596-grebenshchikova + homework-g597-kochukov + homework-g597-sigareva + workshop-materials @@ -200,7 +218,7 @@ - + From 80863bf9483f014bb63d31d8558c5fb82ac652ac Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Wed, 9 Nov 2016 02:05:37 +0300 Subject: [PATCH 20/34] add my solution again --- .../g595/zueva/task1/AzazaCalculator.java | 43 ++----------------- 1 file changed, 3 insertions(+), 40 deletions(-) diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java index e20b3293f..d7e43c3a5 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java @@ -13,45 +13,8 @@ class AzazaCalculator implements Calculator { @Override public double calculate(String s) throws ParsingException { - /*if (s == null) { - throw new ParsingException("null"); - } - if (s == ""){ - throw new ParsingException("empty string"); - } - if (s == " "){ - throw new ParsingException("empty string"); - } - for(int i = 1; i < s.length() - 1; ++i){ - if(s.charAt(i) == ' ' || s.charAt(i) == '\n' || s.charAt(i) == '\t'){ - s = s.substring(0, i - 1) + s.substring(i + 1, s.length() - 1); - } - } - if(s.charAt(0) == ' ' || s.charAt(0) == '\n' || s.charAt(0) == '\t'){ - s = s.substring(1,s.length() - 1); - } - if(s.charAt(s.length() - 1) == ' ' || s.charAt(s.length() - 1) == '\n' || s.charAt(s.length() - 1) == '\t'){ - s = s.substring(0, s.length() - 2); - } - for(int i = 0; i < s.length(); ++i) { - if(!(s.charAt(i) == '+' || s.charAt(i) == '-' || s.charAt(i) == '*' ||s.charAt(i) == '/' || s.charAt(i) == '(' - ||s.charAt(i) == ')'||s.charAt(i) == '.'||s.charAt(i) == '1' || s.charAt(i) == '2' || s.charAt(i) == '0' || - s.charAt(i) == '3' || s.charAt(i) == '4' || s.charAt(i) == '5' || s.charAt(i) == '6' || s.charAt(i) == '7' || - s.charAt(i) == '8' || s.charAt(i) == '9')){ - throw new ParsingException("Bad symbol"); - } - } - for(int i = 0; i < s.length() - 1; ++i){ - if(s.charAt(i) == '/' && s.charAt(i + 1) == '0') { - return Double.POSITIVE_INFINITY; - } - } - for(int i =0; i < s.length() - 2; ++i) { - if(s.charAt(i) == '/' && s.charAt(i + 2) == '0' && s.charAt(i + 1) == '-') { - return Double.NEGATIVE_INFINITY; - } - }*/ - s = to_polish(s); + + s = topolish(s); String buffer; double num_1 = 0; double num_2 = 0; @@ -120,7 +83,7 @@ public static short priority(char a) { } } - public static String to_polish(String input_string) { + public static String topolish(String input_string) { char c; char t; From 270516570db98a799e176860755511fa790becab Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Wed, 9 Nov 2016 02:21:45 +0300 Subject: [PATCH 21/34] Latest version of task 2 595-zueva --- .../g595/zueva/task1/AzazaCalculator.java | 133 ------------------ .../g595/zueva/task2/MyKVStorage.java | 56 ++++---- .../g595/zueva/task2/Serializer1.java | 1 - ...fied_serializers.java => Serializers.java} | 2 +- .../g595/zueva/task1/AzazaCalculatorTest.java | 10 -- .../g595/zueva/task2/My_KV_StorageTest.java | 56 ++++---- 6 files changed, 56 insertions(+), 202 deletions(-) rename homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/{Specified_serializers.java => Serializers.java} (98%) diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java index d7e43c3a5..8b1378917 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java @@ -1,134 +1 @@ -package ru.mipt.java2016.g595.zueva.task1; - -import ru.mipt.java2016.homework.base.task1.Calculator; -import ru.mipt.java2016.homework.base.task1.ParsingException; - -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.StringTokenizer; - -class AzazaCalculator implements Calculator { - - static final AzazaCalculator INSTANCE = new AzazaCalculator(); - - @Override - public double calculate(String s) throws ParsingException { - - s = topolish(s); - String buffer; - double num_1 = 0; - double num_2 = 0; - Deque stack = new ArrayDeque<>(); - StringTokenizer tok = new StringTokenizer(s); - while (tok.hasMoreTokens()) try { - buffer = tok.nextToken().trim(); - if (oper(buffer.charAt(0)) && buffer.length() == 1) { - System.out.println(buffer.charAt(0)); - num_1 = stack.pop(); - num_2 = stack.pop(); - switch (buffer.charAt(0)) { - case '+': { - num_2 = num_2 + num_1; - break; - } - case '-': { - num_2 = num_2 - num_1; - break; - } - case '*': { - num_2 = num_2 * num_1; - break; - } - case '/': { - num_2 = num_2 / num_1; - break; - } - - default: - throw new Exception("\nIndefinite operator\n"); - } - stack.push(num_2); - } else { - num_2 = Float.parseFloat(buffer); - stack.push(num_2); - } - } catch (Exception error) { - throw new ParsingException("\nIndefinite symbol\n"); - - } - - - return stack.pop(); - } - - public static boolean oper(char a) { - if (a == '+' || a == '-' || a == '*' || a == '/') { - return true; - } else { - return false; - } - } - public static short priority(char a) { - switch (a) { - case '*': - return 2; - case '/': - return 2; - case '+': - return 1; - case '-': - return 1; - default: - return -1; - } - } - - public static String topolish(String input_string) { - - char c; - char t; - StringBuilder buffer = new StringBuilder(""); - StringBuilder output = new StringBuilder(""); - - for (int i = 0; i < input_string.length(); ++i) { - c = input_string.charAt(i); - if (oper(c)) { - // System.out.println("@"); - while (buffer.length() > 0) { - t = buffer.substring(buffer.length() - 1).charAt(0); - if (oper(t) && (priority(c) <= priority(t))) { - output.append(" ").append(t).append(" "); - buffer.setLength(buffer.length() - 1); - } else { - output.append(" "); - break; - } - } - output.append(" "); - buffer.append(c); - } else if ('(' == c) { - buffer.append(c); - } else if (')' == c) { - t = buffer.substring(buffer.length() - 1).charAt(0); - while ('(' != t) { - // System.out.println("&"); - output.append(" ").append(t); - buffer.setLength(buffer.length() - 1); - t = buffer.substring(buffer.length() - 1).charAt(0); - } - buffer.setLength(buffer.length() - 1); - } else { - - output.append(c); - } - } - - while (buffer.length() > 0) { - output.append(" ").append(buffer.substring(buffer.length() - 1)); - buffer.setLength(buffer.length() - 1); - } - - return output.toString(); - } -} diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java index 70e1b3e72..30da87685 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java @@ -3,54 +3,54 @@ /*сreated by nestyme*/ import ru.mipt.java2016.homework.base.task2.KeyValueStorage; -import ru.mipt.java2016.homework.g595.zueva.task2.Serializer; + import java.util.Iterator; import java.util.Map; import java.io.*; import java.util.HashMap; -public class MyKVStorage implements KeyValueStorage { +public class MyKVStorage + implements KeyValueStorage { private static final String VALIDATION_STRING; static { VALIDATION_STRING = "My strange storage"; } - private String FileName; - public HashMap CurrentStorage; - public Serializer keySerializer; - public Serializer valueSerializer; - public boolean ifOpen = false; + private String filename; + private HashMap currentstorage; + private Serializer keySerializer; + private Serializer valueSerializer; + private boolean ifOpen = false; /*Конструктор класс хранилища*/ public MyKVStorage(String newFileName, Serializer newKeySerialisation, - Serializer newValueSerialisation) throws IOException { + Serializer newValueSerialisation) throws IOException, Exception { keySerializer = newKeySerialisation; valueSerializer = newValueSerialisation; - FileName = newFileName + "/note.txt"; - CurrentStorage = new HashMap(); + filename = newFileName + "/note.txt"; + currentstorage = new HashMap(); ifOpen = true; /*проверка, возможно ли открыть и создать файл*/ - File destination = new File(FileName); + File destination = new File(filename); if (!destination.exists()) { destination.createNewFile(); - try (DataOutputStream out = new DataOutputStream(new FileOutputStream(FileName))) { + try (DataOutputStream out = new DataOutputStream(new FileOutputStream(filename))) { out.writeUTF(VALIDATION_STRING); out.writeInt(0b0); - } catch (Exception e) { - throw new IllegalStateException("Cannot write to file"); } } - /* Существует ли наша валидирующая строка в файле && проверка, возможно ли читать из файла*/ - try (DataInputStream in = new DataInputStream(new FileInputStream(FileName))) { + /* Существует ли наша валидирующая строка в файле && + проверка, возможно ли читать из файла*/ + try (DataInputStream in = new DataInputStream(new FileInputStream(filename))) { if (!in.readUTF().equals(VALIDATION_STRING)) { throw new IllegalStateException("Unknown validation"); } @@ -59,20 +59,18 @@ public MyKVStorage(String newFileName, K keyToInsert = keySerializer.readFromStream(in); V valueToInsert = valueSerializer.readFromStream(in); - CurrentStorage.put(keyToInsert, valueToInsert); + currentstorage.put(keyToInsert, valueToInsert); } - } catch (Exception exception) { - throw new IllegalStateException("Cannot read from file"); } } @Override public void close() throws IOException { isFileClosed(); try - (DataOutputStream out = new DataOutputStream(new FileOutputStream(FileName))) { + (DataOutputStream out = new DataOutputStream(new FileOutputStream(filename))) { out.writeUTF(VALIDATION_STRING); - out.writeInt(CurrentStorage.size()); - for (Map.Entry i : CurrentStorage.entrySet()) { + out.writeInt(currentstorage.size()); + for (Map.Entry i : currentstorage.entrySet()) { keySerializer.writeToStream(out, i.getKey()); valueSerializer.writeToStream(out, i.getValue()); @@ -80,44 +78,44 @@ public void close() throws IOException { } ifOpen = false; - } catch (Exception e) { + } catch (IOException e) { e.printStackTrace(); } } @Override public V read(K key) { isFileClosed(); - return CurrentStorage.get(key); + return currentstorage.get(key); } @Override public boolean exists(K key) { isFileClosed(); - return CurrentStorage.keySet().contains(key); + return currentstorage.keySet().contains(key); } @Override public void write(K key, V value) { isFileClosed(); - CurrentStorage.put(key, value); + currentstorage.put(key, value); } @Override public void delete(K key) { isFileClosed(); - CurrentStorage.remove(key); + currentstorage.remove(key); } @Override public Iterator readKeys() { isFileClosed(); - return CurrentStorage.keySet().iterator(); + return currentstorage.keySet().iterator(); } @Override public int size() { isFileClosed(); - return CurrentStorage.size(); + return currentstorage.size(); } diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializer1.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializer1.java index d30d3a839..85e7e025a 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializer1.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializer1.java @@ -1,7 +1,6 @@ package ru.mipt.java2016.homework.g595.zueva.task2; import java.io.DataInputStream; -import java.io.DataOutput; import java.io.DataOutputStream; import java.io.IOException; diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Specified_serializers.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java similarity index 98% rename from homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Specified_serializers.java rename to homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java index 5aa312c8a..432f726af 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Specified_serializers.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java @@ -11,7 +11,7 @@ import ru.mipt.java2016.homework.tests.task2.StudentKey; -public class Specified_serializers{ +public class Serializers { public static class SerialiserInt implements Serializer { diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java b/homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java index d0fec2ee9..8b1378917 100644 --- a/homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java +++ b/homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java @@ -1,11 +1 @@ -package ru.mipt.java2016.g595.zueva.task1; - -import ru.mipt.java2016.homework.tests.task1.AbstractCalculatorTest; - -public class AzazaCalculatorTest extends AbstractCalculatorTest { - @Override - public AzazaCalculator calc() { - return AzazaCalculator.INSTANCE; - } -} diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java b/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java index 21a722fff..d02e56eba 100644 --- a/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java +++ b/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java @@ -1,52 +1,52 @@ package ru.mipt.java2016.homework.g595.zueva.task2; -/*created by nestyme on 31.10.16*/ + import ru.mipt.java2016.homework.base.task2.KeyValueStorage; import ru.mipt.java2016.homework.tests.task2.AbstractSingleFileStorageTest; import ru.mipt.java2016.homework.tests.task2.Student; import ru.mipt.java2016.homework.tests.task2.StudentKey; -import java.io.IOException; - +/** + * Created by maria on 26.10.16. + */ public class My_KV_StorageTest extends AbstractSingleFileStorageTest { @Override - public KeyValueStorage buildNumbersStorage(String path) { - MyKVStorage answer1 = null; + protected KeyValueStorage buildStringsStorage(String path) { + MyKVStorage result = null; + Serializers.SerializerString a; + Serializers.SerializerString b; try { - answer1 = new MyKVStorage(path, new Specified_serializers.SerialiserInt(), - new Specified_serializers.SerializerDouble()); - } catch (IOException exception) { - System.out.println(exception.getMessage()); + result = new MyKVStorage(path, new Serializers.SerializerString(), + new Serializers.SerializerString()); + } catch (Exception except) { + System.out.println(except.getMessage()); } - return answer1; + return result; } + @Override - public KeyValueStorage buildPojoStorage(String path) { - MyKVStorage answer2 = null; + protected KeyValueStorage buildNumbersStorage(String path) { + MyKVStorage result = null; try { - answer2 = new MyKVStorage(path, new Specified_serializers.SerializerStudentKey(), - new Specified_serializers.SerializerStudent()); - } catch (IOException exception) { - System.out.println(exception.getMessage()); + result = new MyKVStorage(path, new Serializers.SerialiserInt(), + new Serializers.SerializerDouble()); + } catch (Exception e) { + System.out.println(e.getMessage()); } - return answer2; + return result; } @Override - public KeyValueStorage buildStringsStorage(String path) { - Specified_serializers.SerializerString a; - Specified_serializers.SerializerString b; - MyKVStorage answer3 = null; + protected KeyValueStorage buildPojoStorage(String path) { + MyKVStorage result = null; try { - answer3 = new MyKVStorage(path, new Specified_serializers.SerializerString(), - new Specified_serializers.SerializerString()); - } catch (IOException exception) { - System.out.println(exception.getMessage()); + result = new MyKVStorage(path, new Serializers.SerializerStudentKey(), + new Serializers.SerializerStudent()); + } catch (Exception ex) { + System.out.println(ex.getMessage()); } - return answer3; + return result; } } - - From 5021127ee9fc88f10de41f9212cb87d0dc4d32b0 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Wed, 9 Nov 2016 02:24:34 +0300 Subject: [PATCH 22/34] Latest version of task 2 595-zueva --- .../ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java index 30da87685..a049d51cf 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java @@ -63,6 +63,7 @@ public MyKVStorage(String newFileName, } } } + @Override public void close() throws IOException { isFileClosed(); @@ -82,6 +83,7 @@ public void close() throws IOException { e.printStackTrace(); } } + @Override public V read(K key) { isFileClosed(); From 9191e68224a8221eb6cd21ee0c548f3d349d1324 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Sat, 19 Nov 2016 13:38:39 +0300 Subject: [PATCH 23/34] Latest version of task 2 595-zueva new --- homework-g595-zueva/pom.xml | 1 + .../mipt/java2016/g595/zueva/task3/main.java | 7 +++ .../ru/mipt/java2016/g595/zueva/task3/notes | 4 ++ .../g595/zueva/task2/MyKVStorage.java | 12 ++--- .../{Serializer1.java => Serializer.java} | 0 .../g595/zueva/task2/Serializers.java | 36 +-------------- .../g595/zueva/task2/My_KV_StorageTest.java | 46 +++++++++++++++---- 7 files changed, 55 insertions(+), 51 deletions(-) create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/main.java create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/notes rename homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/{Serializer1.java => Serializer.java} (100%) diff --git a/homework-g595-zueva/pom.xml b/homework-g595-zueva/pom.xml index d6686b501..ebbfe1909 100644 --- a/homework-g595-zueva/pom.xml +++ b/homework-g595-zueva/pom.xml @@ -22,6 +22,7 @@ ru.mipt.java2016 homework-tests 1.0.0 + test diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/main.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/main.java new file mode 100644 index 000000000..fe64213b9 --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/main.java @@ -0,0 +1,7 @@ +package ru.mipt.java2016.g595.zueva.task3; + +/** + * Created by someb on 19.11.2016. + */ +public class main { +} diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/notes b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/notes new file mode 100644 index 000000000..08165bea2 --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/notes @@ -0,0 +1,4 @@ +Проверить работу кэша +коллизии +последовательное чтение +100к 10 минут diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java index a049d51cf..d95c78162 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java @@ -12,11 +12,8 @@ public class MyKVStorage implements KeyValueStorage { - private static final String VALIDATION_STRING; + private static final String VALIDATION_STRING = "My strange storage"; - static { - VALIDATION_STRING = "My strange storage"; - } private String filename; private HashMap currentstorage; @@ -24,7 +21,7 @@ public class MyKVStorage private Serializer valueSerializer; private boolean ifOpen = false; - /*Конструктор класс хранилища*/ + /*Конструктор класса хранилища*/ public MyKVStorage(String newFileName, Serializer newKeySerialisation, @@ -67,8 +64,7 @@ public MyKVStorage(String newFileName, @Override public void close() throws IOException { isFileClosed(); - try - (DataOutputStream out = new DataOutputStream(new FileOutputStream(filename))) { + try (DataOutputStream out = new DataOutputStream(new FileOutputStream(filename))) { out.writeUTF(VALIDATION_STRING); out.writeInt(currentstorage.size()); for (Map.Entry i : currentstorage.entrySet()) { @@ -83,7 +79,7 @@ public void close() throws IOException { e.printStackTrace(); } } - + @Override public V read(K key) { isFileClosed(); diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializer1.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializer.java similarity index 100% rename from homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializer1.java rename to homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializer.java diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java index 432f726af..c316a6350 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java @@ -4,11 +4,8 @@ * Created by nestyme on 30.10.2016. */ - import java.io.*; import java.util.Date; -import ru.mipt.java2016.homework.tests.task2.Student; -import ru.mipt.java2016.homework.tests.task2.StudentKey; public class Serializers { @@ -51,35 +48,4 @@ public Double readFromStream(DataInputStream in) throws IOException { return in.readDouble(); } } - - public static class SerializerStudentKey implements Serializer { - - public void writeToStream(DataOutputStream out, StudentKey value) throws IOException { - out.writeInt(value.getGroupId()); - out.writeUTF(value.getName()); - } - - public StudentKey readFromStream(DataInputStream in) throws IOException { - return new StudentKey(in.readInt(), in.readUTF()); - } - } - - public static class SerializerStudent implements Serializer { - - public void writeToStream(DataOutputStream out, Student value) throws IOException { - out.writeInt(value.getGroupId()); - out.writeUTF(value.getName()); - out.writeUTF(value.getHometown()); - out.writeLong(value.getBirthDate().getTime()); - out.writeBoolean(value.isHasDormitory()); - out.writeDouble(value.getAverageScore()); - - } - - public Student readFromStream(DataInputStream in) throws IOException { - return new Student(in.readInt(), in.readUTF(), in.readUTF(), - new Date(in.readLong()), in.readBoolean(), - in.readDouble()); - } - } -} +} \ No newline at end of file diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java b/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java index d02e56eba..e65915e30 100644 --- a/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java +++ b/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java @@ -1,14 +1,13 @@ package ru.mipt.java2016.homework.g595.zueva.task2; - import ru.mipt.java2016.homework.base.task2.KeyValueStorage; import ru.mipt.java2016.homework.tests.task2.AbstractSingleFileStorageTest; import ru.mipt.java2016.homework.tests.task2.Student; import ru.mipt.java2016.homework.tests.task2.StudentKey; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.Date; - -/** - * Created by maria on 26.10.16. - */ public class My_KV_StorageTest extends AbstractSingleFileStorageTest { @Override @@ -39,14 +38,45 @@ protected KeyValueStorage buildNumbersStorage(String path) { } @Override - protected KeyValueStorage buildPojoStorage(String path) { + public KeyValueStorage buildPojoStorage(String path) { MyKVStorage result = null; try { - result = new MyKVStorage(path, new Serializers.SerializerStudentKey(), - new Serializers.SerializerStudent()); + result = new MyKVStorage(path, new SerializerStudentKey(), + new SerializerStudent()); } catch (Exception ex) { System.out.println(ex.getMessage()); } return result; } } +class SerializerStudentKey implements Serializer { + + public void writeToStream(DataOutputStream out, StudentKey value) throws IOException { + out.writeInt(value.getGroupId()); + out.writeUTF(value.getName()); + } + + public StudentKey readFromStream(DataInputStream in) throws IOException { + return new StudentKey(in.readInt(), in.readUTF()); + } +} + +class SerializerStudent implements Serializer { + + public void writeToStream(DataOutputStream out, Student value) throws IOException { + out.writeInt(value.getGroupId()); + out.writeUTF(value.getName()); + out.writeUTF(value.getHometown()); + out.writeLong(value.getBirthDate().getTime()); + out.writeBoolean(value.isHasDormitory()); + out.writeDouble(value.getAverageScore()); + + } + + public Student readFromStream(DataInputStream in) throws IOException { + return new Student(in.readInt(), in.readUTF(), in.readUTF(), + new Date(in.readLong()), in.readBoolean(), + in.readDouble()); + } +} + From bdd476eeaf80aa2110201e57f35df7f929697604 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Sat, 19 Nov 2016 13:40:34 +0300 Subject: [PATCH 24/34] Latest version of task 2 595-zueva new --- .../main/java/ru/mipt/java2016/g595/zueva/task3/main.java | 7 ------- .../java2016/homework/g595/zueva/task2/Serializers.java | 1 - 2 files changed, 8 deletions(-) diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/main.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/main.java index fe64213b9..e69de29bb 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/main.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/main.java @@ -1,7 +0,0 @@ -package ru.mipt.java2016.g595.zueva.task3; - -/** - * Created by someb on 19.11.2016. - */ -public class main { -} diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java index c316a6350..26b85cacf 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java @@ -5,7 +5,6 @@ */ import java.io.*; -import java.util.Date; public class Serializers { From 9eba0ec107262570495eb3a3d879055928b3750e Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Sat, 19 Nov 2016 13:49:49 +0300 Subject: [PATCH 25/34] Latest version of task 2 595-zueva neww --- .../ru/mipt/java2016/homework/base/task2/KeyValueStorage.java | 1 - .../java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java | 1 - 2 files changed, 2 deletions(-) delete mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java diff --git a/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java b/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java index 7d22a55cb..15a524c40 100644 --- a/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java +++ b/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java @@ -14,7 +14,6 @@ * @since 04.10.16 */ public interface KeyValueStorage extends Closeable { - void isFileClosed(); /** * Возвращает значение для данного ключа, если оно есть в хранилище. diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java deleted file mode 100644 index 8b1378917..000000000 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java +++ /dev/null @@ -1 +0,0 @@ - From ee2bc890921b30598595b993affcc925f2986bda Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Sat, 19 Nov 2016 13:51:51 +0300 Subject: [PATCH 26/34] Latest version of task 2 595-zueva neww --- .../ru/mipt/java2016/homework/base/task2/KeyValueStorage.java | 1 + .../java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java} | 0 2 files changed, 1 insertion(+) rename homework-g595-zueva/src/{test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java => main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java} (100%) diff --git a/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java b/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java index 15a524c40..b3ad6f8ef 100644 --- a/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java +++ b/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java @@ -15,6 +15,7 @@ */ public interface KeyValueStorage extends Closeable { + void isFileClosed(); /** * Возвращает значение для данного ключа, если оно есть в хранилище. * Иначе возвращает null. diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java similarity index 100% rename from homework-g595-zueva/src/test/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculatorTest.java rename to homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java From bd3d05cbfeee37add51cca879ab8d2a9c089e374 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Sat, 19 Nov 2016 13:53:59 +0300 Subject: [PATCH 27/34] Latest version of task 2 595-zueva neww --- .../ru/mipt/java2016/homework/base/task2/KeyValueStorage.java | 1 - .../java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java | 1 - 2 files changed, 2 deletions(-) delete mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java diff --git a/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java b/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java index b3ad6f8ef..15a524c40 100644 --- a/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java +++ b/homework-base/src/main/java/ru/mipt/java2016/homework/base/task2/KeyValueStorage.java @@ -15,7 +15,6 @@ */ public interface KeyValueStorage extends Closeable { - void isFileClosed(); /** * Возвращает значение для данного ключа, если оно есть в хранилище. * Иначе возвращает null. diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java deleted file mode 100644 index 8b1378917..000000000 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task1/AzazaCalculator.java +++ /dev/null @@ -1 +0,0 @@ - From bb7af1c6427f3df17fab6920c56ab0a6d6f55903 Mon Sep 17 00:00:00 2001 From: nadezhdazueva Date: Sat, 19 Nov 2016 13:55:26 +0300 Subject: [PATCH 28/34] Update Calculator.java --- Calculator.java | 200 ------------------------------------------------ 1 file changed, 200 deletions(-) diff --git a/Calculator.java b/Calculator.java index c31501dbd..d3f5a12fa 100644 --- a/Calculator.java +++ b/Calculator.java @@ -1,201 +1 @@ -package my_calc; - -/** - * Created by Nadya Zueva - * при написании использована статья на e-maxx - */ - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.StringTokenizer; -import java.util.*; -import java.io.*; -import java.util.Iterator; - -public interface Calculator { - public static void main(String[] args) throws Exception { - System.out.println("Enter string:\n"); - BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); - String string; - - try { - string = read.readLine(); - string = to_polish(string); - // System.out.println(string); - System.out.println(count(string)); - } catch (Exception error) { - System.out.println(error.getMessage()); - } - } - - public static float calculate(String s) throws Parsing Exception { - String buffer; - float num_1 = 0; - float num_2 = 0; - - //Stack stack = new ArrayStack(); - Deque stack = new ArrayDeque(); - StringTokenizer tok = new StringTokenizer(s); - while (tok.hasMoreTokens()) { - try { - buffer = tok.nextToken().trim(); - if (oper(buffer.charAt(0))&& buffer.length() == 1) { - num_1 = stack.pop(); num_2 = stack.pop(); - switch (buffer.charAt(0)) { - case '+': { - num_2 = num_2 + num_1; - break; - } - case '-': { - num_2 = num_2 - num_1; - break; - } - case '*': { - num_2 = num_2 * num_1; - break; - } - case '/': { - num_2 = (Float)num_2 / num_1; - break; - } - - default: - throw new Exception("\nIndefinite operator\n"); - } - stack.push(num_2); - } else { - num_2 = Float.parseFloat(buffer); - stack.push(num_2); - } - } catch (Exception error) { - throw new Exception("\nIndefinite symbol\n"); - } - } - - - return stack.pop(); - } - - - //является ли символ оператором - public static boolean oper(char a) { - if (a == '+' || a == '-' || a == '*' || a == '/') { - return true; - } else { - return false; - } - } - - /*является ли символ скобкой - public static boolean brack(char a) { - if (a == '(' || a == ')') { - return true; - } - else { - return false; - } - }*/ -//является ли числом - /* public static boolean numb(char a) { - switch (a) { - case '0': { - return true; - } - case '1': { - return true; - } - case '2': { - return true; - } - case '3': { - return true; - } - case '4': { - return true; - } - case '5': { - return true; - } - case '6': { - return true; - } - case '7': { - return true; - } - case '8': { - return true; - } - case '9': { - return true; - } - } - return false; - }*/ - - //приоритет операции - public static short priority(char a) { - switch (a) { - case '*': - return 2; - case '/': - return 2; - case '+': - return 1; - case '-': - return 1; - default: - return -1; - } - } - - public static String to_polish(String input_string) throws Exception { - - char c; - char t; - StringBuilder buffer = new StringBuilder(""); - StringBuilder output = new StringBuilder(""); - - for (int i = 0; i < input_string.length(); ++i) { - c = input_string.charAt(i); - if (oper(c)) { - // System.out.println("@"); - while (buffer.length() > 0) { - t = buffer.substring(buffer.length() - 1).charAt(0); - if (oper(t) && (priority(c) <= priority(t))) { - output.append(" ").append(t).append(" "); - buffer.setLength(buffer.length() - 1); - } else { - output.append(" "); - break; - } - } - output.append(" "); - buffer.append(c); - } else if ('(' == c) { - buffer.append(c); - } else if (')' == c) { - t = buffer.substring(buffer.length() - 1).charAt(0); - while ('(' != t) { - // System.out.println("&"); - output.append(" ").append(t); - buffer.setLength(buffer.length() - 1); - t = buffer.substring(buffer.length() - 1).charAt(0); - } - buffer.setLength(buffer.length() - 1); - } else { - - output.append(c); - } - } - - while (buffer.length() > 0) { - output.append(" ").append(buffer.substring(buffer.length() - 1)); - buffer.setLength(buffer.length() - 1); - } - - return output.toString(); - } -} From c62dfd5e80816e827d3e34512239ab732e520f31 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Sat, 19 Nov 2016 13:59:50 +0300 Subject: [PATCH 29/34] Latest version of task 2 595-zueva neww --- Calculator.java | 201 ------------------------------------------------ 1 file changed, 201 deletions(-) delete mode 100644 Calculator.java diff --git a/Calculator.java b/Calculator.java deleted file mode 100644 index c31501dbd..000000000 --- a/Calculator.java +++ /dev/null @@ -1,201 +0,0 @@ -package my_calc; - -/** - * Created by Nadya Zueva - * при написании использована статья на e-maxx - */ - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.StringTokenizer; -import java.util.*; -import java.io.*; -import java.util.Iterator; - -public interface Calculator { - public static void main(String[] args) throws Exception { - System.out.println("Enter string:\n"); - BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); - String string; - - try { - string = read.readLine(); - string = to_polish(string); - // System.out.println(string); - System.out.println(count(string)); - } catch (Exception error) { - System.out.println(error.getMessage()); - } - } - - public static float calculate(String s) throws Parsing Exception { - String buffer; - float num_1 = 0; - float num_2 = 0; - - //Stack stack = new ArrayStack(); - Deque stack = new ArrayDeque(); - StringTokenizer tok = new StringTokenizer(s); - while (tok.hasMoreTokens()) { - try { - buffer = tok.nextToken().trim(); - if (oper(buffer.charAt(0))&& buffer.length() == 1) { - num_1 = stack.pop(); num_2 = stack.pop(); - switch (buffer.charAt(0)) { - case '+': { - num_2 = num_2 + num_1; - break; - } - case '-': { - num_2 = num_2 - num_1; - break; - } - case '*': { - num_2 = num_2 * num_1; - break; - } - case '/': { - num_2 = (Float)num_2 / num_1; - break; - } - - default: - throw new Exception("\nIndefinite operator\n"); - } - stack.push(num_2); - } else { - num_2 = Float.parseFloat(buffer); - stack.push(num_2); - } - } catch (Exception error) { - throw new Exception("\nIndefinite symbol\n"); - } - } - - - return stack.pop(); - } - - - //является ли символ оператором - public static boolean oper(char a) { - if (a == '+' || a == '-' || a == '*' || a == '/') { - return true; - } else { - return false; - } - } - - /*является ли символ скобкой - public static boolean brack(char a) { - if (a == '(' || a == ')') { - return true; - } - else { - return false; - } - }*/ -//является ли числом - /* public static boolean numb(char a) { - switch (a) { - case '0': { - return true; - } - case '1': { - return true; - } - case '2': { - return true; - } - case '3': { - return true; - } - case '4': { - return true; - } - case '5': { - return true; - } - case '6': { - return true; - } - case '7': { - return true; - } - case '8': { - return true; - } - case '9': { - return true; - } - } - return false; - }*/ - - //приоритет операции - public static short priority(char a) { - switch (a) { - case '*': - return 2; - case '/': - return 2; - case '+': - return 1; - case '-': - return 1; - default: - return -1; - } - } - - public static String to_polish(String input_string) throws Exception { - - char c; - char t; - StringBuilder buffer = new StringBuilder(""); - StringBuilder output = new StringBuilder(""); - - for (int i = 0; i < input_string.length(); ++i) { - c = input_string.charAt(i); - if (oper(c)) { - // System.out.println("@"); - while (buffer.length() > 0) { - t = buffer.substring(buffer.length() - 1).charAt(0); - if (oper(t) && (priority(c) <= priority(t))) { - output.append(" ").append(t).append(" "); - buffer.setLength(buffer.length() - 1); - } else { - output.append(" "); - break; - } - } - output.append(" "); - buffer.append(c); - } else if ('(' == c) { - buffer.append(c); - } else if (')' == c) { - t = buffer.substring(buffer.length() - 1).charAt(0); - while ('(' != t) { - // System.out.println("&"); - output.append(" ").append(t); - buffer.setLength(buffer.length() - 1); - t = buffer.substring(buffer.length() - 1).charAt(0); - } - buffer.setLength(buffer.length() - 1); - } else { - - output.append(c); - } - } - - while (buffer.length() > 0) { - output.append(" ").append(buffer.substring(buffer.length() - 1)); - buffer.setLength(buffer.length() - 1); - } - - return output.toString(); - } -} - From 5ffacb51be479b285de5de6e678fd5ce6c9f7c34 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Sat, 19 Nov 2016 14:03:54 +0300 Subject: [PATCH 30/34] Latest version of task 2 595-zueva neww --- Calculator.java | 201 ------------------------------------------------ 1 file changed, 201 deletions(-) delete mode 100644 Calculator.java diff --git a/Calculator.java b/Calculator.java deleted file mode 100644 index 5e1381119..000000000 --- a/Calculator.java +++ /dev/null @@ -1,201 +0,0 @@ -package my_calc; - -/** - * Created by Nadya Zueva - * при написании использована статья на e-maxx - */ - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.StringTokenizer; -import java.util.*; -import java.io.*; -import java.util.Iterator; - -public interface Calculator { - public static void main(String[] args) throws Exception { - System.out.println("Enter string:\n"); - BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); - String string; - - try { - string = read.readLine(); - string = to_polish(string); - // System.out.println(string); - System.out.println(count(string)); - } catch (Exception error) { - System.out.println(error.getMessage()); - } - } - - public static float calculate(String s) throws Parsing Exception { - String buffer; - float num_1 = 0; - float num_2 = 0; - - //Stack stack = new ArrayStack(); - Deque stack = new ArrayDeque(); - StringTokenizer tok = new StringTokenizer(s); - while (tok.hasMoreTokens()) { - try { - buffer = tok.nextToken().trim(); - if (oper(buffer.charAt(0))&& buffer.length() == 1) { - num_1 = stack.pop(); num_2 = stack.pop(); - switch (buffer.charAt(0)) { - case '+': { - num_2 = num_2 + num_1; - break; - } - case '-': { - num_2 = num_2 - num_1; - break; - } - case '*': { - num_2 = num_2 * num_1; - break; - } - case '/': { - num_2 = (Float)num_2 / num_1; - break; - } - - default: - throw new Exception("\nIndefinite operator\n"); - } - stack.push(num_2); - } else { - num_2 = Float.parseFloat(buffer); - stack.push(num_2); - } - } catch (Exception error) { - throw new Exception("\nIndefinite symbol\n"); - } - } - - - return stack.pop(); - } - - - //является ли символ оператором - public static boolean oper(char a) { - if (a == '+' || a == '-' || a == '*' || a == '/') { - return true; - } else { - return false; - } - } - - /*является ли символ скобкой - public static boolean brack(char a) { - if (a == '(' || a == ')') { - return true; - } - else { - return false; - } - }*/ -//является ли числом - /* public static boolean numb(char a) { - switch (a) { - case '0': { - return true; - } - case '1': { - return true; - } - case '2': { - return true; - } - case '3': { - return true; - } - case '4': { - return true; - } - case '5': { - return true; - } - case '6': { - return true; - } - case '7': { - return true; - } - case '8': { - return true; - } - case '9': { - return true; - } - } - return false; - }*/ - - //приоритет операции - public static short priority(char a) { - switch (a) { - case '*': - return 2; - case '/': - return 2; - case '+': - return 1; - case '-': - return 1; - default: - return -1; - } - } - - public static String to_polish(String input_string) throws Exception { - - char c; - char t; - StringBuilder buffer = new StringBuilder(""); - StringBuilder output = new StringBuilder(""); - - for (int i = 0; i < input_string.length(); ++i) { - c = input_string.charAt(i); - if (oper(c)) { - // System.out.println("@"); - while (buffer.length() > 0) { - t = buffer.substring(buffer.length() - 1).charAt(0); - if (oper(t) && (priority(c) <= priority(t))) { - output.append(" ").append(t).append(" "); - buffer.setLength(buffer.length() - 1); - } else { - output.append(" "); - break; - } - } - output.append(" "); - buffer.append(c); - } else if ('(' == c) { - buffer.append(c); - } else if (')' == c) { - t = buffer.substring(buffer.length() - 1).charAt(0); - while ('(' != t) { - // System.out.println("&"); - output.append(" ").append(t); - buffer.setLength(buffer.length() - 1); - t = buffer.substring(buffer.length() - 1).charAt(0); - } - buffer.setLength(buffer.length() - 1); - } else { - - output.append(c); - } - } - - while (buffer.length() > 0) { - output.append(" ").append(buffer.substring(buffer.length() - 1)); - buffer.setLength(buffer.length() - 1); - } - - return output.toString(); - } -} - From 2c69f9aa153c0ba5daf940697b179c3b7ae976b8 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Sat, 26 Nov 2016 06:51:07 +0300 Subject: [PATCH 31/34] Latest version of task 2 595-zueva --- .../mipt/java2016/g595/zueva/task3/main.java | 0 .../ru/mipt/java2016/g595/zueva/task3/notes | 4 ---- .../g595/zueva/task2/MyKVStorage.java | 20 +++++++++---------- ...Serializer.java => SerializerStorage.java} | 2 +- .../g595/zueva/task2/Serializers.java | 6 +++--- .../g595/zueva/task2/My_KV_StorageTest.java | 18 ++++++++--------- 6 files changed, 23 insertions(+), 27 deletions(-) delete mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/main.java delete mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/notes rename homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/{Serializer.java => SerializerStorage.java} (90%) diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/main.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/main.java deleted file mode 100644 index e69de29bb..000000000 diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/notes b/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/notes deleted file mode 100644 index 08165bea2..000000000 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/g595/zueva/task3/notes +++ /dev/null @@ -1,4 +0,0 @@ -Проверить работу кэша -коллизии -последовательное чтение -100к 10 минут diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java index d95c78162..074a252e0 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java @@ -17,17 +17,17 @@ public class MyKVStorage private String filename; private HashMap currentstorage; - private Serializer keySerializer; - private Serializer valueSerializer; + private SerializerStorage keySerializerStorage; + private SerializerStorage valueSerializerStorage; private boolean ifOpen = false; /*Конструктор класса хранилища*/ public MyKVStorage(String newFileName, - Serializer newKeySerialisation, - Serializer newValueSerialisation) throws IOException, Exception { - keySerializer = newKeySerialisation; - valueSerializer = newValueSerialisation; + SerializerStorage newKeySerialisation, + SerializerStorage newValueSerialisation) throws IOException, Exception { + keySerializerStorage = newKeySerialisation; + valueSerializerStorage = newValueSerialisation; filename = newFileName + "/note.txt"; currentstorage = new HashMap(); ifOpen = true; @@ -54,8 +54,8 @@ public MyKVStorage(String newFileName, int quantity = in.readInt(); for (int i = 0; i < quantity; ++i) { - K keyToInsert = keySerializer.readFromStream(in); - V valueToInsert = valueSerializer.readFromStream(in); + K keyToInsert = keySerializerStorage.readFromStream(in); + V valueToInsert = valueSerializerStorage.readFromStream(in); currentstorage.put(keyToInsert, valueToInsert); } } @@ -69,8 +69,8 @@ public void close() throws IOException { out.writeInt(currentstorage.size()); for (Map.Entry i : currentstorage.entrySet()) { - keySerializer.writeToStream(out, i.getKey()); - valueSerializer.writeToStream(out, i.getValue()); + keySerializerStorage.writeToStream(out, i.getKey()); + valueSerializerStorage.writeToStream(out, i.getValue()); } ifOpen = false; diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializer.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/SerializerStorage.java similarity index 90% rename from homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializer.java rename to homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/SerializerStorage.java index 85e7e025a..f35d08b36 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializer.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/SerializerStorage.java @@ -7,7 +7,7 @@ /** * Created by nestyme on 31.10.2016. */ -interface Serializer { +interface SerializerStorage { void writeToStream(DataOutputStream out, T value)throws IOException; T readFromStream(DataInputStream in) throws IOException; diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java index 26b85cacf..509b94421 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java @@ -9,7 +9,7 @@ public class Serializers { - public static class SerialiserInt implements Serializer { + public static class SerialiserInt implements SerializerStorage { public void writeToStream(DataOutputStream out, Integer value) throws IOException { @@ -25,7 +25,7 @@ public Integer readFromStream(DataInputStream in) throws IOException { } - public static class SerializerString implements Serializer { + public static class SerializerStorageString implements SerializerStorage { public void writeToStream(DataOutputStream out, String value) throws IOException { out.writeUTF(value); @@ -36,7 +36,7 @@ public String readFromStream(DataInputStream in) throws IOException { } } - public static class SerializerDouble implements Serializer { + public static class SerializerStorageDouble implements SerializerStorage { public void writeToStream(DataOutputStream out, Double value) throws IOException { out.writeDouble(value); diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java b/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java index e65915e30..758c8ab2f 100644 --- a/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java +++ b/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java @@ -13,11 +13,11 @@ public class My_KV_StorageTest extends AbstractSingleFileStorageTest { @Override protected KeyValueStorage buildStringsStorage(String path) { MyKVStorage result = null; - Serializers.SerializerString a; - Serializers.SerializerString b; + Serializers.SerializerStorageString a; + Serializers.SerializerStorageString b; try { - result = new MyKVStorage(path, new Serializers.SerializerString(), - new Serializers.SerializerString()); + result = new MyKVStorage(path, new Serializers.SerializerStorageString(), + new Serializers.SerializerStorageString()); } catch (Exception except) { System.out.println(except.getMessage()); } @@ -30,7 +30,7 @@ protected KeyValueStorage buildNumbersStorage(String path) { MyKVStorage result = null; try { result = new MyKVStorage(path, new Serializers.SerialiserInt(), - new Serializers.SerializerDouble()); + new Serializers.SerializerStorageDouble()); } catch (Exception e) { System.out.println(e.getMessage()); } @@ -41,15 +41,15 @@ protected KeyValueStorage buildNumbersStorage(String path) { public KeyValueStorage buildPojoStorage(String path) { MyKVStorage result = null; try { - result = new MyKVStorage(path, new SerializerStudentKey(), - new SerializerStudent()); + result = new MyKVStorage(path, new SerializerStorageStudentKey(), + new SerializerStorageStudent()); } catch (Exception ex) { System.out.println(ex.getMessage()); } return result; } } -class SerializerStudentKey implements Serializer { +class SerializerStorageStudentKey implements SerializerStorage { public void writeToStream(DataOutputStream out, StudentKey value) throws IOException { out.writeInt(value.getGroupId()); @@ -61,7 +61,7 @@ public StudentKey readFromStream(DataInputStream in) throws IOException { } } -class SerializerStudent implements Serializer { +class SerializerStorageStudent implements SerializerStorage { public void writeToStream(DataOutputStream out, Student value) throws IOException { out.writeInt(value.getGroupId()); From daf18a508199c9b95c72c276a2eebb0ccf17fba6 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Sat, 26 Nov 2016 06:55:03 +0300 Subject: [PATCH 32/34] Latest version of task 2 595-zueva --- .../ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java index 074a252e0..0a2bc0ee0 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java @@ -12,7 +12,7 @@ public class MyKVStorage implements KeyValueStorage { - private static final String VALIDATION_STRING = "My strange storage"; + private static final String VALIDATION_STRING = "My storage"; private String filename; From a312bcfaec0dd180a6df54f29413e96bdfe4d5b7 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Sat, 26 Nov 2016 07:00:04 +0300 Subject: [PATCH 33/34] Latest version of task 2 595-zueva --- java/io/annotations.xml | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 java/io/annotations.xml diff --git a/java/io/annotations.xml b/java/io/annotations.xml deleted file mode 100644 index b088ffd48..000000000 --- a/java/io/annotations.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file From 4f82b2a9e66e1d43dd32259daea63b32e7c272b3 Mon Sep 17 00:00:00 2001 From: Nadezda Zueva Date: Sat, 17 Dec 2016 11:50:46 +0300 Subject: [PATCH 34/34] my commit --- .../g595/zueva/task2/MyKVStorage.java | 126 -------- .../task2/{ => task2}/SerializerStorage.java | 2 +- .../zueva/task2/{ => task2}/Serializers.java | 6 +- .../g595/zueva/task2/task3/FRFile.java | 81 +++++ .../zueva/task2/task3/MyOptKVStorage.java | 96 ++++++ .../task2/task3/OptDoubleSerializer.java | 24 ++ .../task2/task3/OptIntegerSerializer.java | 20 ++ .../g595/zueva/task2/task3/OptKVStorage.java | 297 ++++++++++++++++++ .../task2/task3/OptKVStorageSerializer.java | 10 + .../zueva/task2/task3/OptStrSerializer.java | 18 ++ .../OptStrSerializerStudentStudentKey.java | 30 ++ .../g595/zueva/task2/task3/testing.java | 26 ++ .../zueva/task3/FastKeyValueStorageTest.java | 39 +++ .../FastKeyValueStudentKeySerializer.java | 44 +++ .../task3/FastKeyValueStudentSerializer.java | 35 +++ .../g595/zueva/task2/My_KV_StorageTest.java | 82 ----- 16 files changed, 725 insertions(+), 211 deletions(-) delete mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java rename homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/{ => task2}/SerializerStorage.java (84%) rename homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/{ => task2}/Serializers.java (88%) create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/FRFile.java create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/MyOptKVStorage.java create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptDoubleSerializer.java create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptIntegerSerializer.java create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptKVStorage.java create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptKVStorageSerializer.java create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptStrSerializer.java create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptStrSerializerStudentStudentKey.java create mode 100644 homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/testing.java create mode 100644 homework-g595-zueva/src/test/java/ru/mipt/java/homework/g595/zueva/task3/FastKeyValueStorageTest.java create mode 100644 homework-g595-zueva/src/test/java/ru/mipt/java/homework/g595/zueva/task3/FastKeyValueStudentKeySerializer.java create mode 100644 homework-g595-zueva/src/test/java/ru/mipt/java/homework/g595/zueva/task3/FastKeyValueStudentSerializer.java delete mode 100644 homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java deleted file mode 100644 index 0a2bc0ee0..000000000 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/MyKVStorage.java +++ /dev/null @@ -1,126 +0,0 @@ -package ru.mipt.java2016.homework.g595.zueva.task2; - -/*сreated by nestyme*/ - -import ru.mipt.java2016.homework.base.task2.KeyValueStorage; - -import java.util.Iterator; -import java.util.Map; -import java.io.*; -import java.util.HashMap; - - -public class MyKVStorage - implements KeyValueStorage { - private static final String VALIDATION_STRING = "My storage"; - - - private String filename; - private HashMap currentstorage; - private SerializerStorage keySerializerStorage; - private SerializerStorage valueSerializerStorage; - private boolean ifOpen = false; - - /*Конструктор класса хранилища*/ - - public MyKVStorage(String newFileName, - SerializerStorage newKeySerialisation, - SerializerStorage newValueSerialisation) throws IOException, Exception { - keySerializerStorage = newKeySerialisation; - valueSerializerStorage = newValueSerialisation; - filename = newFileName + "/note.txt"; - currentstorage = new HashMap(); - ifOpen = true; - - /*проверка, возможно ли открыть и создать файл*/ - - File destination = new File(filename); - if (!destination.exists()) { - destination.createNewFile(); - - try (DataOutputStream out = new DataOutputStream(new FileOutputStream(filename))) { - - out.writeUTF(VALIDATION_STRING); - out.writeInt(0b0); - - } - } - /* Существует ли наша валидирующая строка в файле && - проверка, возможно ли читать из файла*/ - try (DataInputStream in = new DataInputStream(new FileInputStream(filename))) { - if (!in.readUTF().equals(VALIDATION_STRING)) { - throw new IllegalStateException("Unknown validation"); - } - int quantity = in.readInt(); - for (int i = 0; i < quantity; ++i) { - - K keyToInsert = keySerializerStorage.readFromStream(in); - V valueToInsert = valueSerializerStorage.readFromStream(in); - currentstorage.put(keyToInsert, valueToInsert); - } - } - } - - @Override - public void close() throws IOException { - isFileClosed(); - try (DataOutputStream out = new DataOutputStream(new FileOutputStream(filename))) { - out.writeUTF(VALIDATION_STRING); - out.writeInt(currentstorage.size()); - for (Map.Entry i : currentstorage.entrySet()) { - - keySerializerStorage.writeToStream(out, i.getKey()); - valueSerializerStorage.writeToStream(out, i.getValue()); - - } - ifOpen = false; - - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public V read(K key) { - isFileClosed(); - return currentstorage.get(key); - } - - @Override - public boolean exists(K key) { - isFileClosed(); - return currentstorage.keySet().contains(key); - } - - @Override - public void write(K key, V value) { - isFileClosed(); - currentstorage.put(key, value); - } - - @Override - public void delete(K key) { - isFileClosed(); - currentstorage.remove(key); - } - - @Override - public Iterator readKeys() { - isFileClosed(); - return currentstorage.keySet().iterator(); - } - - @Override - public int size() { - isFileClosed(); - return currentstorage.size(); - } - - - public void isFileClosed() { - if (!ifOpen) { - throw new IllegalStateException("Storage had been already closed"); - } - } -} - diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/SerializerStorage.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/SerializerStorage.java similarity index 84% rename from homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/SerializerStorage.java rename to homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/SerializerStorage.java index f35d08b36..6aac27f72 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/SerializerStorage.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/SerializerStorage.java @@ -1,4 +1,4 @@ -package ru.mipt.java2016.homework.g595.zueva.task2; +package ru.mipt.java2016.homework.g595.zueva.task2.task2; import java.io.DataInputStream; import java.io.DataOutputStream; diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializers.java similarity index 88% rename from homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java rename to homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializers.java index 509b94421..7508d7281 100644 --- a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/Serializers.java +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task2/Serializers.java @@ -1,10 +1,12 @@ -package ru.mipt.java2016.homework.g595.zueva.task2; +package ru.mipt.java2016.homework.g595.zueva.task2.task2; /** * Created by nestyme on 30.10.2016. */ -import java.io.*; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; public class Serializers { diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/FRFile.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/FRFile.java new file mode 100644 index 000000000..77d82ee81 --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/FRFile.java @@ -0,0 +1,81 @@ +package ru.mipt.java2016.homework.g595.zueva.task2.task3; +import java.io.*; +import java.nio.*; +/** + * Created by someb on 17.12.2016. + */ +public class FRFile { + private ByteBuffer mybuffer = ByteBuffer.allocate(Long.SIZE / 8); + private File myfile; + private BufferedInputStream in; + private BufferedOutputStream out; + + private boolean ifEmpty = false; + + public FRFile(String fileDirectory, String fileName) throws IOException { + File directory = new File(fileDirectory); + if (directory.exists()) { + myfile = new File(fileDirectory, fileName); + myfile.createNewFile(); + in = new BufferedInputStream(new FileInputStream(myfile)); + } else { + throw new IOException("Cannot found directory"); + } + } + + public long ReadFileOffst() throws IOException { + if (in.read(mybuffer.array(), 0, Long.SIZE / 8) != Long.SIZE / 8) { + throw new IOException("Can`t continue reading"); + } + return mybuffer.getLong(0); + } + public int readKey() throws IOException { + if (in.read(mybuffer.array(), 0, Integer.SIZE / 8) != Integer.SIZE / 8) { + throw new IOException("Can`t continue reading"); + } + return mybuffer.getInt(0); + } + + public void writeBytes(ByteBuffer bytesToWrite) throws IOException { + out.write(bytesToWrite.array()); + } + + public void writeFileOffst(long value) throws IOException { + mybuffer.putLong(0, value); + out.write(mybuffer.array()); + } + + public ByteBuffer byteReading(int size) throws IOException { + ByteBuffer bytesRead = ByteBuffer.allocate(size); + in.read(bytesRead.array(), 0, size); + return bytesRead; + } + + + public void SizeWr(int size) throws IOException { + mybuffer.putInt(0, size); + out.write(mybuffer.array(), 0, Integer.SIZE / 8); + } + + public void Clean() throws IOException { + ifEmpty = true; + in.close(); + myfile.delete(); + myfile.createNewFile(); + out = new BufferedOutputStream(new FileOutputStream(myfile)); + } + + public void close() throws IOException { + if (ifEmpty) { + mybuffer.putInt(0, Integer.MIN_VALUE); + out.write(mybuffer.array(), 0, Integer.SIZE / 8); + out.close(); + } else { + in.close(); + } + } + + public boolean checkIsEmpty() throws IOException { + return in.available() == 0; + } +} diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/MyOptKVStorage.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/MyOptKVStorage.java new file mode 100644 index 000000000..ae1ff7ea3 --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/MyOptKVStorage.java @@ -0,0 +1,96 @@ +package ru.mipt.java2016.homework.g595.zueva.task2.task3; + +/** + * Created by someb on 17.12.2016. + */ +import java.io.*; + import java.nio.ByteBuffer; + +public class MyOptKVStorage { + private BufferedInputStream input; + private BufferedOutputStream output; + private File storageInstance; + private File bufferStorageInstance; + private RandomAccessFile randomAccessFile; + private ByteBuffer byteBuffer = ByteBuffer.allocate(Integer.SIZE / 8); + + public MyOptKVStorage(String fileDirectory, String fileName) throws IOException { + File directory = new File(fileDirectory); + if (directory.exists()) { + storageInstance = new File(fileDirectory, fileName); + bufferStorageInstance = new File(fileDirectory, "buffer.db"); + storageInstance.createNewFile(); + randomAccessFile = new RandomAccessFile(storageInstance, "rw"); + /* ! 'true' because we rather write to the end of the file */ + output = new BufferedOutputStream(new FileOutputStream(storageInstance, true)); + } else { + throw new IllegalStateException("There is no such directory"); + } + } + + public void writeSizeToStream(int size) throws IOException { + byteBuffer.putInt(0, size); + output.write(byteBuffer.array()); + } + + public void writeBytesToStream(ByteBuffer bytesToWrite) throws IOException { + output.write(bytesToWrite.array()); + } + + public void flushStream() throws IOException { + output.flush(); + } + + public int readKey(long offset) throws IOException { + randomAccessFile.seek(offset); + return randomAccessFile.readInt(); + } + + public ByteBuffer readBytes(int size) throws IOException { + ByteBuffer value = ByteBuffer.allocate(size); + randomAccessFile.readFully(value.array()); + return value; + } + + public int readKeyFromStream() throws IOException { + if (input.read(byteBuffer.array(), 0, Integer.SIZE / 8) != Integer.SIZE / 8) { + throw new IOException("Error during reading"); + } + return byteBuffer.getInt(0); + } + + public ByteBuffer readValueFromStream(int size) throws IOException { + ByteBuffer value = ByteBuffer.allocate(size); + if (input.read(value.array(), 0, size) != size) { + throw new IOException("Error during reading"); + } + return value; + } + + public long getLength() throws IOException { + return randomAccessFile.length(); + } + + public void close() throws IOException { + byteBuffer.putInt(0, Integer.MIN_VALUE); + output.write(byteBuffer.array()); + output.close(); + randomAccessFile.close(); + } + + public void beginUpdate() throws IOException { + output.close(); + randomAccessFile.close(); + bufferStorageInstance.createNewFile(); + input = new BufferedInputStream(new FileInputStream(storageInstance)); + output = new BufferedOutputStream(new FileOutputStream(bufferStorageInstance)); + } + + public void endUpdate() throws IOException { + output.close(); + input.close(); + bufferStorageInstance.renameTo(storageInstance); + randomAccessFile = new RandomAccessFile(storageInstance, "rw"); + output = new BufferedOutputStream(new FileOutputStream(storageInstance, true)); + } + } \ No newline at end of file diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptDoubleSerializer.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptDoubleSerializer.java new file mode 100644 index 000000000..7481cb5a7 --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptDoubleSerializer.java @@ -0,0 +1,24 @@ +package ru.mipt.java2016.homework.g595.zueva.task2.task3; + + +import java.nio.ByteBuffer; + + public class OptDoubleSerializer implements OptKVStorageSerializer { + + @Override + public ByteBuffer srlzToStr(Double value) { + ByteBuffer serialized = ByteBuffer.allocate(SrlzSize(value)); + serialized.putDouble(value); + return serialized; + } + + @Override + public Double desrlzFrStr(ByteBuffer input) { + return input.getDouble(); + } + + @Override + public int SrlzSize(Double value) { + return Double.SIZE / 8; + } + } diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptIntegerSerializer.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptIntegerSerializer.java new file mode 100644 index 000000000..d2a324584 --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptIntegerSerializer.java @@ -0,0 +1,20 @@ +package ru.mipt.java2016.homework.g595.zueva.task2.task3; +import java.nio.ByteBuffer; +public class OptIntegerSerializer implements OptKVStorageSerializer { + @Override + public ByteBuffer srlzToStr(Integer value) { + ByteBuffer serialized = ByteBuffer.allocate(SrlzSize(value)); + serialized.putInt(value); + return serialized; + } + + @Override + public Integer desrlzFrStr(ByteBuffer input) { + return input.getInt(); + } + + @Override + public int SrlzSize(Integer value) { + return Integer.SIZE / 8; + } +} diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptKVStorage.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptKVStorage.java new file mode 100644 index 000000000..e1d5441df --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptKVStorage.java @@ -0,0 +1,297 @@ +package ru.mipt.java2016.homework.g595.zueva.task2.task3; + +import ru.mipt.java2016.homework.base.task2.KeyValueStorage; +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +/** + * find in the cache firstly. + */ +public class OptKVStorage implements KeyValueStorage { + private static final String STORAGE_NAME = "somestorage.db"; + private String FileIn; + private final HashMap offsetTable = new HashMap(); + private ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); + private Lock writeLock = readWriteLock.writeLock(); + private Lock readLock = readWriteLock.readLock(); + private static final String REFERENCE_FILE_NAME = "ref.db"; + private static final String LOCK_FILE_NAME = "locking.db"; + private File LockingMyFile; + private MyOptKVStorage storage; + private FRFile RefFile; + private OptKVStorageSerializer KeySerializer; + private OptKVStorageSerializer ValueSerializer; + private boolean ifOpen = false; + private long StorSize; + private long recordLength; + private long deletedField = 0; + private boolean updated = false; + private LinkedHashMap cache; + private static final int CACHE_SIZE = 1000; + + public OptKVStorage(String fileDirectoryInit, OptKVStorageSerializer keySerializerInit, + OptKVStorageSerializer valueSerializerInit) throws IOException { + ifOpen = true; + KeySerializer = keySerializerInit; + ValueSerializer = valueSerializerInit; + FileIn = fileDirectoryInit; + RefFile = new FRFile(FileIn, REFERENCE_FILE_NAME); + storage = new MyOptKVStorage(FileIn, STORAGE_NAME); + StorSize = storage.getLength(); + recordLength = StorSize - 1; + cache = new LinkedHashMap(); + String lockFilePath = FileIn + File.separator + LOCK_FILE_NAME; + LockingMyFile = new File(lockFilePath); + if (!LockingMyFile.exists()) { + try { + LockingMyFile.createNewFile(); + } catch (Exception e) { + throw new IOException("Failed to create lock file"); + } + } else { + throw new IOException("Somebody is working w/ db right now."); + } + startWorkWithOffsetTable(); + } + @Override + public V read(K key) { + V value; + writeLock.lock(); + try { + checkIfClosed(); + if (cache.containsKey(key)) { + return cache.get(key); + } + if (!exists(key)) { + value = null; + } else { + value = readValue(key); + } + } catch (IOException e) { + value = null; + } finally { + writeLock.unlock(); + } + return value; + } + + /* ! First we look for key in cache, than we try to find it in the storage */ + @Override + public boolean exists(K key) { + readLock.lock(); + try { + checkIfClosed(); + if (cache.containsKey(key)) { + return true; + } + return offsetTable.keySet().contains(key); + } finally { + readLock.unlock(); + } + } + + /* ! First we look for key in cache, if we succeed we upgrade the value ++ * otherwise we put key - value to cache; we put key - value to storage */ + @Override + public void write(K key, V value) { + writeLock.lock(); + try { + checkIfClosed(); + if (cache.containsKey(key)) { + cache.put(key, value); + balanceCache(); + } else { + writeField(key, value); + cache.put(key, value); + balanceCache(); + updated = true; + } + } catch (IOException e) { + throw new IllegalStateException("Error during writing"); + } finally { + writeLock.unlock(); + } + } + + /* ! delete key - value from storage and from cache if needed */ + @Override + public void delete(K key) { + writeLock.lock(); + try { + checkIfClosed(); + if (cache.containsKey(key)) { + cache.remove(key); + } + offsetTable.remove(key); + ++deletedField; + updated = true; + } finally { + writeLock.unlock(); + } + } + + @Override + public Iterator readKeys() { + readLock.lock(); + try { + checkIfClosed(); + return offsetTable.keySet().iterator(); + } finally { + readLock.unlock(); + } + } + + @Override + public int size() { + readLock.lock(); + try { + checkIfClosed(); + return offsetTable.size(); + } finally { + readLock.unlock(); + } + } + + /* ! close files and write changes to the disk */ + @Override + public void close() throws IOException { + writeLock.lock(); + try { + checkIfClosed(); + updateStorageFile(); + storage.close(); + if (updated) { + endWorkWithOffsetTable(); + updated = false; + } + if (LockingMyFile.exists()) { + try { + LockingMyFile.delete(); + } catch (Exception e) { + throw new IOException("Failed to delete lock file"); + } + } + RefFile.close(); + ifOpen = false; + } finally { + writeLock.unlock(); + } + } + + private void startWorkWithOffsetTable() throws IOException { + if (!RefFile.checkIsEmpty()) { + int counter = RefFile.readKey(); + while (counter > 0) { + K key = KeySerializer.desrlzFrStr(RefFile.byteReading(counter)); + long offset = RefFile.ReadFileOffst(); + offsetTable.put(key, offset); + counter = RefFile.readKey(); + } + } + } + + private void endWorkWithOffsetTable() throws IOException { + RefFile.Clean(); + for (HashMap.Entry iterator : offsetTable.entrySet()) { + RefFile.SizeWr(KeySerializer.SrlzSize(iterator.getKey())); + RefFile.writeBytes(KeySerializer.srlzToStr(iterator.getKey())); + RefFile.writeFileOffst(iterator.getValue()); + } + offsetTable.clear(); + if (LockingMyFile.exists()) { + try { + LockingMyFile.delete(); + } catch (Exception e) { + throw new IOException("Failed to delete lock file"); + } + } + } + + private void checkFreeSpace(long offset) throws IOException { + if (offset > recordLength) { + storage.flushStream(); + recordLength = StorSize - 1; + } + } + + private V readValue(K key) throws IOException { + long offset = offsetTable.get(key); + checkFreeSpace(offset); + int serializedKey = storage.readKey(offset); + return ValueSerializer.desrlzFrStr(storage.readBytes(serializedKey)); + } + + private void writeOffsetField(K key) throws IOException { + offsetTable.put(key, KeySerializer.SrlzSize(key) + Integer.SIZE / 8 + StorSize); + } + + private void writeKey(K key) throws IOException { + storage.writeSizeToStream(KeySerializer.SrlzSize(key)); + storage.writeBytesToStream(KeySerializer.srlzToStr(key)); + } + + private void writeValue(V value) throws IOException { + storage.writeSizeToStream(ValueSerializer.SrlzSize(value)); + storage.writeBytesToStream(ValueSerializer.srlzToStr(value)); + } + + private void updateStorageLength(K key, V value) throws IOException { + StorSize = StorSize + Integer.SIZE / 8 + KeySerializer.SrlzSize(key) + + Integer.SIZE / 8 + ValueSerializer.SrlzSize(value); + } + + private void writeField(K key, V value) throws IOException { + writeOffsetField(key); + writeKey(key); + writeValue(value); + updateStorageLength(key, value); + } + + private void updateStorageFile() throws IOException { + if (deletedField > 4 * offsetTable.size()) { + storage.beginUpdate(); + StorSize = 0; + long oldFileOffset = 0; + int keySize = storage.readKeyFromStream(); + while (keySize > 0) { + ByteBuffer serializedKey = storage.readValueFromStream(keySize); + K key = KeySerializer.desrlzFrStr(serializedKey); + int valueSize = storage.readKeyFromStream(); + ByteBuffer value = storage.readValueFromStream(valueSize); + if (offsetTable.containsKey(key) && offsetTable.get(key).equals(oldFileOffset)) { + writeField(key, ValueSerializer.desrlzFrStr(value)); + } + oldFileOffset = oldFileOffset + Integer.SIZE / 8 + Integer.SIZE / 8 + keySize + valueSize; + keySize = storage.readKeyFromStream(); + } + storage.endUpdate(); + } + } + + private void checkIfClosed() { + if (!ifOpen) { + throw new IllegalStateException("Impossible to work with closed storage"); + } + } + + /* ! method for controlling cache size */ + private void balanceCache() { + if (cache.size() > CACHE_SIZE) { + Iterator> iterator = cache.entrySet().iterator(); + iterator.next(); + iterator.remove(); + } + } +} + + + + diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptKVStorageSerializer.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptKVStorageSerializer.java new file mode 100644 index 000000000..4b715d75d --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptKVStorageSerializer.java @@ -0,0 +1,10 @@ +package ru.mipt.java2016.homework.g595.zueva.task2.task3; + +import java.nio.ByteBuffer; +public interface OptKVStorageSerializer { + int SrlzSize(K value); + + ByteBuffer srlzToStr(K value); + + K desrlzFrStr(ByteBuffer input); +} diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptStrSerializer.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptStrSerializer.java new file mode 100644 index 000000000..5b360171c --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptStrSerializer.java @@ -0,0 +1,18 @@ +package ru.mipt.java2016.homework.g595.zueva.task2.task3; +import java.nio.ByteBuffer; +public class OptStrSerializer implements OptKVStorageSerializer { + @Override + public ByteBuffer srlzToStr(String value) { + return ByteBuffer.wrap(value.getBytes()); + } + + @Override + public String desrlzFrStr(ByteBuffer input) { + return new String(input.array()); + } + + @Override + public int SrlzSize(String value) { + return value.length(); + } +} diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptStrSerializerStudentStudentKey.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptStrSerializerStudentStudentKey.java new file mode 100644 index 000000000..a11300328 --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/OptStrSerializerStudentStudentKey.java @@ -0,0 +1,30 @@ +package ru.mipt.java2016.homework.g595.zueva.task2.task3; + +import java.nio.ByteBuffer; +public class OptStrSerializerStudentStudentKey implements OptKVStorageSerializer { + @Override + public int SrlzSize(String value) { + return 2 * (value.length() + 1); + } + + @Override + public ByteBuffer srlzToStr(String value) { + ByteBuffer serialized = ByteBuffer.allocate(SrlzSize(value)); + for (char c : value.toCharArray()) { + serialized.putChar(c); + } + serialized.putChar('\0'); + return serialized; + } + + @Override + public String desrlzFrStr(ByteBuffer input) { + StringBuilder deserialized = new StringBuilder(); + char c = input.getChar(); + while (c != '\0') { + deserialized.append(c); + c = input.getChar(); + } + return deserialized.toString(); + } +} diff --git a/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/testing.java b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/testing.java new file mode 100644 index 000000000..8f56b4452 --- /dev/null +++ b/homework-g595-zueva/src/main/java/ru/mipt/java2016/homework/g595/zueva/task2/task3/testing.java @@ -0,0 +1,26 @@ +package ru.mipt.java2016.homework.g595.zueva.task2.task3; +import java.io.IOException; +public class testing { + + public static void main(String[] args) { + OptKVStorage fst = + null; + try { + fst = new OptKVStorage("/home/king", new OptIntegerSerializer(), new OptIntegerSerializer()); + } catch (IOException e) { + e.printStackTrace(); + } + fst.write(5, 5); + OptKVStorage snd = + null; + try { + snd = new OptKVStorage("/something", new OptIntegerSerializer(), new OptIntegerSerializer()); + } catch (IOException e) { + e.printStackTrace(); + } + snd.write(6, 6); + snd.write(5, 6); + System.out.println(fst.read(5)); + System.out.println(snd.read(6)); + } +} diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java/homework/g595/zueva/task3/FastKeyValueStorageTest.java b/homework-g595-zueva/src/test/java/ru/mipt/java/homework/g595/zueva/task3/FastKeyValueStorageTest.java new file mode 100644 index 000000000..5ee1a3fe0 --- /dev/null +++ b/homework-g595-zueva/src/test/java/ru/mipt/java/homework/g595/zueva/task3/FastKeyValueStorageTest.java @@ -0,0 +1,39 @@ +package ru.mipt.java.homework.g595.zueva.task3; + +import ru.mipt.java2016.homework.base.task2.KeyValueStorage; +import ru.mipt.java2016.homework.tests.task2.Student; +import ru.mipt.java2016.homework.tests.task2.StudentKey; +import ru.mipt.java2016.homework.base.task2.MalformedDataException; +import ru.mipt.java2016.homework.tests.task3.KeyValueStoragePerformanceTest; +/** + * Created by someb on 17.12.2016. + */ +public class FastKeyValueStorageTest extends KeyValueStoragePerformanceTest{ + @Override + protected KeyValueStorage buildStringsStorage(String path) throws MalformedDataException { + try { + return new FastKeyValueStorageImpl(path, new FastStringSerializer(), new FastStringSerializer()); + } catch (IOException e) { + return null; + } + } + + @Override + protected KeyValueStorage buildNumbersStorage(String path) throws MalformedDataException { + try { + return new FastKeyValueStorageImpl(path, new FastIntegerSerializer(), new FastDoubleSerializer()); + } catch (IOException e) { + return null; + } + } + + @Override + protected KeyValueStorage buildPojoStorage(String path) throws MalformedDataException { + try { + return new FastKeyValueStorageImpl(path, new FastStudentKeySerializer(), new FastStudentSerializer()); + } catch (IOException e) { + return null; + } + } +} +} diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java/homework/g595/zueva/task3/FastKeyValueStudentKeySerializer.java b/homework-g595-zueva/src/test/java/ru/mipt/java/homework/g595/zueva/task3/FastKeyValueStudentKeySerializer.java new file mode 100644 index 000000000..4f9921a11 --- /dev/null +++ b/homework-g595-zueva/src/test/java/ru/mipt/java/homework/g595/zueva/task3/FastKeyValueStudentKeySerializer.java @@ -0,0 +1,44 @@ +package ru.mipt.java.homework.g595.zueva.task3; + +import ru.mipt.java2016.homework.g595.zueva.task2.task3.OptKVStorageSerializer; +import ru.mipt.java2016.homework.tests.task2.Student; +import ru.mipt.java2016.homework.tests.task2.StudentKey; + +import java.nio.ByteBuffer; +import java.util.Date; +public class FastKeyValueStudentKeySerializer implements OptKVStorageSerializer { + @Override + public ByteBuffer srlzToStr(Student value) { + ByteBuffer serialized = ByteBuffer.allocate(SrlzSize(value)); + FastStudentKeySerializer studentKeySerializer = new FastStudentKeySerializer(); + serialized.put(studentKeySerializer.serializeToStream(new StudentKey(value.getGroupId(), + value.getName())).array()); + FastStringSerializerForStudentKeyAndStudent fastStringSerializerForStudentKeyAndStudent = + new FastStringSerializerForStudentKeyAndStudent(); + serialized.put(fastStringSerializerForStudentKeyAndStudent.serializeToStream(value.getHometown()).array()); + serialized.putLong(value.getBirthDate().getTime()); + if (value.isHasDormitory()) { + serialized.put((byte) 1); + } else { + serialized.put((byte) 0); + } + serialized.putDouble(value.getAverageScore()); + return serialized; + } + + @Override + public Student desrlzFrStr(ByteBuffer input) { + FastStringSerializerForStudentKeyAndStudent fastStringSerializerForStudentKeyAndStudent = + new FastStringSerializerForStudentKeyAndStudent(); + return new Student(input.getInt(), + fastStringSerializerForStudentKeyAndStudent.deserializeFromStream(input), + fastStringSerializerForStudentKeyAndStudent.deserializeFromStream(input), + new Date(input.getLong()), (input.get() == 1), input.getDouble()); + } + + @Override + public int SrlzSize(Student value) { + return Integer.SIZE / 8 + 2 * (value.getName().length() + 1) + + 2 * (value.getHometown().length() + 1) + Long.SIZE / 8 + 1 + Double.SIZE / 8; + } +} diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java/homework/g595/zueva/task3/FastKeyValueStudentSerializer.java b/homework-g595-zueva/src/test/java/ru/mipt/java/homework/g595/zueva/task3/FastKeyValueStudentSerializer.java new file mode 100644 index 000000000..33ba83c29 --- /dev/null +++ b/homework-g595-zueva/src/test/java/ru/mipt/java/homework/g595/zueva/task3/FastKeyValueStudentSerializer.java @@ -0,0 +1,35 @@ +package ru.mipt.java.homework.g595.zueva.task3; + +import ru.mipt.java2016.homework.g595.zueva.task2.task3.OptKVStorageSerializer; +import ru.mipt.java2016.homework.g595.zueva.task2.task3.OptStrSerializerStudentStudentKey; +import ru.mipt.java2016.homework.tests.task2.Student; +import ru.mipt.java2016.homework.tests.task2.StudentKey; + +import java.nio.ByteBuffer; + +public class FastKeyValueStudentSerializer implements OptKVStorageSerializer { + @Override + public StudentKey desrlzFrStr(ByteBuffer input) { + OptStrSerializerStudentStudentKey fastStringSerializerForStudentKeyAndStudent = + new OptStrSerializerStudentStudentKey(); + return new StudentKey(input.getInt(), fastStringSerializerForStudentKeyAndStudent.desrlzFrStr(input)); + } + @Override + public int SrlzSize(Student value) { + return Integer.SIZE / 8 + 2 * (value.getName().length() + 1); + } + + @Override + public ByteBuffer srlzToStr(Student value) { + ByteBuffer serialized = ByteBuffer.allocate(SrlzSize(value)); + serialized.putInt(value.getGroupId()); + OptStrSerializerStudentStudentKey fastStringSerializerForStudentKeyAndStudent = + new OptStrSerializerStudentStudentKey(); + serialized.put(fastStringSerializerForStudentKeyAndStudent.srlzToStr(value.getName()).array()); + return serialized; + } + + + + +} diff --git a/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java b/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java deleted file mode 100644 index 758c8ab2f..000000000 --- a/homework-g595-zueva/src/test/java/ru/mipt/java2016/homework/g595/zueva/task2/My_KV_StorageTest.java +++ /dev/null @@ -1,82 +0,0 @@ -package ru.mipt.java2016.homework.g595.zueva.task2; -import ru.mipt.java2016.homework.base.task2.KeyValueStorage; -import ru.mipt.java2016.homework.tests.task2.AbstractSingleFileStorageTest; -import ru.mipt.java2016.homework.tests.task2.Student; -import ru.mipt.java2016.homework.tests.task2.StudentKey; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.util.Date; - -public class My_KV_StorageTest extends AbstractSingleFileStorageTest { - - @Override - protected KeyValueStorage buildStringsStorage(String path) { - MyKVStorage result = null; - Serializers.SerializerStorageString a; - Serializers.SerializerStorageString b; - try { - result = new MyKVStorage(path, new Serializers.SerializerStorageString(), - new Serializers.SerializerStorageString()); - } catch (Exception except) { - System.out.println(except.getMessage()); - } - return result; - } - - - @Override - protected KeyValueStorage buildNumbersStorage(String path) { - MyKVStorage result = null; - try { - result = new MyKVStorage(path, new Serializers.SerialiserInt(), - new Serializers.SerializerStorageDouble()); - } catch (Exception e) { - System.out.println(e.getMessage()); - } - return result; - } - - @Override - public KeyValueStorage buildPojoStorage(String path) { - MyKVStorage result = null; - try { - result = new MyKVStorage(path, new SerializerStorageStudentKey(), - new SerializerStorageStudent()); - } catch (Exception ex) { - System.out.println(ex.getMessage()); - } - return result; - } -} -class SerializerStorageStudentKey implements SerializerStorage { - - public void writeToStream(DataOutputStream out, StudentKey value) throws IOException { - out.writeInt(value.getGroupId()); - out.writeUTF(value.getName()); - } - - public StudentKey readFromStream(DataInputStream in) throws IOException { - return new StudentKey(in.readInt(), in.readUTF()); - } -} - -class SerializerStorageStudent implements SerializerStorage { - - public void writeToStream(DataOutputStream out, Student value) throws IOException { - out.writeInt(value.getGroupId()); - out.writeUTF(value.getName()); - out.writeUTF(value.getHometown()); - out.writeLong(value.getBirthDate().getTime()); - out.writeBoolean(value.isHasDormitory()); - out.writeDouble(value.getAverageScore()); - - } - - public Student readFromStream(DataInputStream in) throws IOException { - return new Student(in.readInt(), in.readUTF(), in.readUTF(), - new Date(in.readLong()), in.readBoolean(), - in.readDouble()); - } -} -