11/*
2- Copyright 1995-2015 Esri
2+ Copyright 1995-2018 Esri
33
44 Licensed under the Apache License, Version 2.0 (the "License");
55 you may not use this file except in compliance with the License.
2323 */
2424package com .esri .core .geometry ;
2525
26+ import java .io .IOException ;
27+ import java .io .InvalidObjectException ;
28+ import java .io .ObjectStreamException ;
29+ import java .io .Serializable ;
2630import java .util .ArrayList ;
2731
28- class QuadTreeImpl {
32+ class QuadTreeImpl implements Serializable {
33+ private static final long serialVersionUID = 1L ;
34+
2935 static final class QuadTreeIteratorImpl {
3036 /**
3137 * Resets the iterator to an starting state on the Quad_tree_impl. If
@@ -1248,19 +1254,28 @@ private void set_data_values_(int data_handle, int element, Envelope2D bounding_
12481254 private Envelope2D m_data_extent ;
12491255 private StridedIndexTypeCollection m_quad_tree_nodes ;
12501256 private StridedIndexTypeCollection m_element_nodes ;
1251- private ArrayList <Data > m_data ;
1257+ transient private ArrayList <Data > m_data ;
12521258 private AttributeStreamOfInt32 m_free_data ;
12531259 private int m_root ;
12541260 private int m_height ;
12551261 private boolean m_b_store_duplicates ;
12561262
1257- private int m_quadrant_mask = 3 ;
1258- private int m_height_bit_shift = 2 ;
1259- private int m_flushing_count = 5 ;
1263+ final static private int m_quadrant_mask = 3 ;
1264+ final static private int m_height_bit_shift = 2 ;
1265+ final static private int m_flushing_count = 5 ;
12601266
12611267 static final class Data {
12621268 int element ;
12631269 Envelope2D box ;
1270+
1271+ Data () {
1272+ }
1273+
1274+ Data (int element_ , double x1 , double y1 , double x2 , double y2 ) {
1275+ element = element_ ;
1276+ box = new Envelope2D ();
1277+ box .setCoords (x1 , y1 , x2 , y2 );
1278+ }
12641279
12651280 Data (int element_ , Envelope2D box_ ) {
12661281 element = element_ ;
@@ -1269,6 +1284,57 @@ static final class Data {
12691284 }
12701285 }
12711286
1287+ private void writeObject (java .io .ObjectOutputStream stream )
1288+ throws IOException {
1289+ stream .defaultWriteObject ();
1290+ stream .writeInt (m_data .size ());
1291+ for (int i = 0 , n = m_data .size (); i < n ; ++i ) {
1292+ Data d = m_data .get (i );
1293+ if (d != null ) {
1294+ stream .writeByte (1 );
1295+ stream .writeInt (d .element );
1296+ stream .writeDouble (d .box .xmin );
1297+ stream .writeDouble (d .box .ymin );
1298+ stream .writeDouble (d .box .xmax );
1299+ stream .writeDouble (d .box .ymax );
1300+ }
1301+ else {
1302+ stream .writeByte (0 );
1303+ }
1304+
1305+ }
1306+ }
1307+
1308+ private void readObject (java .io .ObjectInputStream stream )
1309+ throws IOException , ClassNotFoundException {
1310+ stream .defaultReadObject ();
1311+ int dataSize = stream .readInt ();
1312+ m_data = new ArrayList <Data >(dataSize );
1313+ for (int i = 0 , n = dataSize ; i < n ; ++i ) {
1314+ int b = stream .readByte ();
1315+ if (b == 1 ) {
1316+ int elm = stream .readInt ();
1317+ double x1 = stream .readDouble ();
1318+ double y1 = stream .readDouble ();
1319+ double x2 = stream .readDouble ();
1320+ double y2 = stream .readDouble ();
1321+ Data d = new Data (elm , x1 , y1 , x2 , y2 );
1322+ m_data .add (d );
1323+ }
1324+ else if (b == 0 ) {
1325+ m_data .add (null );
1326+ }
1327+ else {
1328+ throw new IOException ();
1329+ }
1330+ }
1331+ }
1332+
1333+ @ SuppressWarnings ("unused" )
1334+ private void readObjectNoData () throws ObjectStreamException {
1335+ throw new InvalidObjectException ("Stream data required" );
1336+ }
1337+
12721338 /* m_quad_tree_nodes
12731339 * 0: m_north_east_child
12741340 * 1: m_north_west_child
0 commit comments