powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / java 8 и yeild return C#
17 сообщений из 42, страница 2 из 2
java 8 и yeild return C#
    #38812511
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да читал про этот перец. Еще год назад.
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #38814761
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВобщем этот yield не взлетает из Java. Нужен какой-то враппер.- имплементим Iterable и Iterator
- создаем внутренний поток, где будет выполнятся рекурсивная функция
- для взаимодействия между тек. и внут. потоками используем https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/SynchronousQueue.html] SynchronousQueue ( https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/SynchronousQueue.html#put(E)] put() - для внутреннего потока, https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/SynchronousQueue.html#take()] take() - для текущего)
- hasNext() - счетчик, если можно вычислить кол-во элементов (альтернативный: true - если завершился внут. поток, иначе false )
- next() возвращает значение take()
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #38814794
smackmychi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
avp.mk,

за Lombok спасибо
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #38815369
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем. Не хотел я связываться с Iterable и Iterator . Я в обработке графики
(по пикселам) пытался уйти от явного return new Point(x,y). Вобщем просто
были два метода int getX(), int getY() которые и решали эту задачу. Итератор
в совокупности с генериком всё равно требует "вернуть Object".

Вобщем буду думать.
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #38815375
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Хорстмана в "Java 8 SE, Вводный курс" рассматриваются параллельные вычисления на API Java 8 и на примерах обработки изображений.
Так ли он нужен, этот yieldReturn?
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #38815380
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем-то и не особо нужен. Просто этот чортов старик Гильберт был хитёр как тыща лис
и запилил свою заполняющую кривую через рекурсию. Можно ее и развернуть через
конечный автомат со стеком но суть не меняется. У алгоритма - рекурсивная природа.
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #39029970
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день

Async/await в C# есть - а у нас сейчас есть альтернатива, или аналог?

Видел какие-то реализации на c++ в 20 строк через ламбды ..... но это все не то...


может есть что то через аннотации ??? чтобы так же просто и легко и понято?
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #39196703
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задавил я таки этого Гильберта. Чортов старик. Через BlockingQuee.

Схема такая. Есть рекурсивный процесс-поставщик который реализует
рекурсивный метод рисования кривой Гильберта. Есть блокирующая очередь
которая получает данные от поставщика. И есть потребитель с интерфейсом
Iterator<> который генерирует собственно последовательность координат
и удобен в использовании графических алгоритмов типа анализа, сжатия
e.t.c.

Решение перекликается с Тяпничная география которая у меня ну никак не двигается из за остутствия внятной
схемы раскраски диаграммы.

Понимаю что решение не интелектуальное а просто инженерное. Просто
я исхожу из того что вместо кривой Гильберта могла быть Z-кривая
или еще бох знает какая а на них всех не напасешся имплементаций.

Надеюсь что BQ не будет тормозом в противном случае надо пробовать
альтернативные реализации очередей.
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #39198068
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonРешение перекликается с Тяпничная география которая у меня ну никак не двигается из за остутствия внятной
схемы раскраски диаграммы.
Ну стран предположим не более 2^8. Количество ip4 - 2^32.
32GB и счастье близко.
Влом все одновременно в памяти держать - разбей на файлики a/b/c/d
И пусть за тебя думает кеш файловой системы. :)
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #39198418
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев, ОК, я еще раз озвучу постановку.

Дано:

Последовательность IP-blocks вида:

Код: java
1.
2.
3.
192.168.0.1-192.168.0.254, US, United States
10.60.10.1-10.60.10, JP, Japanese
....



Диапазон и страна. Я привел

Необходимо нарисовать картинку размером 65536 x 65536 пикселов где каждая
точка раскрашена в цвет соответствующей страны (справочник цветов будет
задан как исходные данные). Интервалы между IP-блоками и неаллоцированное
пространство раскрашивается в серй DARK_GRAY цвет.

Диапазоны и интервалы раскрашиваются не в матричном
порядка (слева направо сверху вниз) а в порядке обхода кривой Гилберта.
Это гарантирует соседство ближних адресов всегда без разрывов и переходов.
В идеальном случае IP block должен отображаться в цветной квадрат или
в Г-образную фигуру или более сложную (сцепление квадратов).

Естественно такая большая картинка существует только в нашем воображении и отобразить
ее вряд-ли смогут графические средства.

Но я планирую ее побить на фрагменты размером 800 x 600 (как панорамное фото) :

Код: java
1.
2.
3.
4.
01-01.png ( Rectangle (0,0) - (799,599)
01-02.png .....
02-01.png .....
02-02.png .....



и отрисовать.

После этого отрендерить zoom-уровни

Код: java
1.
2.
3.
4.
01-01-02-02.zoom2x.png
02-02-03-03.zoom2x.png
....
01-01-xx-xx.zoom...png


Для удобства просмотра в UI.
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #39198965
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Это какой то интервальный решатель ! очень похоже ...

но так как все IP адреса известны - то проще просто их все перебрать в цикле ?! чем не решение?
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #39198983
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и буду делать. Перебирать все адреса. Просто множество картинок (array of BufferedImage)
суммарным объемом 4 гига пиксела (RGB-цвет) не влезут в heap.

Надо писать в диск. Думаю над оптимизацией. Как писать учитывая зигзагообразный
порядок кривой.
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #39198996
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТак и буду делать. Перебирать все адреса. Просто множество картинок (array of BufferedImage)
суммарным объемом 4 гига пиксела (RGB-цвет) не влезут в heap.
Тебе RGB нужен только для построения PNG. А для формирования схемы достаточно 1 байта на адрес. Стран-то не более 255?
Но это так. Мысли в слух. Перебор диапазонов, конечно, веселее.
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #39199038
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДумаю над оптимизацией. Как писать учитывая зигзагообразный порядок кривой.
- Полотно разбить на фрагменты (квадратики)
- Координаты начала отрисовки - середина полотна.
- После отрисовки - merge 'им фрагменты.

P.S.
В итоге должно получиться что-то вроде такого ?
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #39199067
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman, да. Совершенно верно. Должна быть цветная карта стран.
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #39199078
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно итератор. Может кому сгодится.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
public class GilbertIteratorBlockingQueue implements Iterator<Position> {

    static Logger logger = LogManager.getLogger(GilbertIteratorBlockingQueue.class);

    Producer producer;
    int size;
    BlockingQueue<Position> queue;
    Position position = Position.DUMMY;
    int state = 0;

    public GilbertIteratorBlockingQueue(int size) {
        if (size<4){
            throw new IllegalArgumentException("The dimension of 'Gilbert' curve cannot be less than 4 x 4!");
        }
        this.size = size;
        queue = new ArrayBlockingQueue<>(1024);
        producer = new Producer();
        new Thread(producer).start();
    }

    class Producer implements Runnable {

        static final int u = 1;
        int glx;
        int gly;
        int level;

        public Producer() {
            level = log2up(size);
            int clp2size = clp2(size);
            if (clp2size > size) {
                logger.warn("Warning! The real dimension of iterator's space has been extended to {}x{} pixels", clp2size, clp2size);
            }
            state = 1;
        }

        public void run() {
            try {
                moveto(0, 0);
                a(level);
                queue.put(Position.DUMMY);
            } catch (InterruptedException e) {
                logger.error(e);
            }
        }

        void linerel(int x, int y) throws InterruptedException {
            glx += x;
            gly += y;
            queue.put(new Position(glx, gly));
        }

        void moveto(int x, int y) throws InterruptedException {
            glx = x;
            gly = y;
            queue.put(new Position(glx, gly));
        }

        // Elements of curve
        void a(int i) throws InterruptedException {
            if (i > 0) {
                d(i - 1);
                linerel(+u, 0);
                a(i - 1);
                linerel(0, u);
                a(i - 1);
                linerel(-u, 0);
                c(i - 1);
            }
        }

        void b(int i) throws InterruptedException {
            if (i > 0) {
                c(i - 1);
                linerel(-u, 0);
                b(i - 1);
                linerel(0, -u);
                b(i - 1);
                linerel(u, 0);
                d(i - 1);
            }
        }

        void c(int i) throws InterruptedException {
            if (i > 0) {
                b(i - 1);
                linerel(0, -u);
                c(i - 1);
                linerel(-u, 0);
                c(i - 1);
                linerel(0, u);
                a(i - 1);
            }
        }

        void d(int i) throws InterruptedException {
            if (i > 0) {
                a(i - 1);
                linerel(0, u);
                d(i - 1);
                linerel(u, 0);
                d(i - 1);
                linerel(0, -u);
                b(i - 1);
            }
        }


    }

    @Override
    public boolean hasNext() {
        if (state == 2){
            return false;
        }
        try {
            position = queue.take();
            if (position == Position.DUMMY) {
                state = 2;
                return false;
            }
        } catch (InterruptedException e) {
            logger.error(e);
        }
        return true;
    }

    @Override
    public Position next() {
        return position;
    }
}
...
Рейтинг: 0 / 0
java 8 и yeild return C#
    #39199738
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНо я планирую ее побить на фрагменты размером 800 x 600 (как панорамное фото) :

Лучше 2^n x 2^n (например 256x256) проще вычислять по маске номер файла. :)
Да и в файле номер цвета. Файлы смело кладешь в дерево
1\2.raw (можно даже в базу битмап)

по первым двум цифрам нашел файл. По третьим и четвертым точку.
Пока первые две цифры не меняются - файл не перечитываем. Но держим открытым.

Можно даже в параллель гонять. Но все одно - ввод-вывод.

Ну и это входные строки отсортируй по ip.

maytonПосле этого отрендерить zoom-уровни

Ну библиотек которые строят пирамиды уровней...
Собственно, там вообще все просто - две соседние слил и из четырех файлов сделал один.

P.S. только ты в онлайне не считай - сделай tile cache, ну и какую-нибудь библиотеку, типа openlayes взять, то с клиентом, вообще можно не особо заморачиваться.
...
Рейтинг: 0 / 0
17 сообщений из 42, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / java 8 и yeild return C#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]