Removing memory allocations

This commit is contained in:
2019-10-18 20:54:47 +02:00
parent 5cbd2a0b69
commit bba41629f4
9 changed files with 21 additions and 23 deletions

View File

@@ -24,8 +24,8 @@ impl Query {
&self.query &self.query
} }
pub fn resolution(&self) -> Option<Vec<u32>> { pub fn resolution(&self) -> &Option<Vec<u32>> {
self.resolution.clone() &self.resolution
} }
pub fn volume(&self) -> Option<f64> { pub fn volume(&self) -> Option<f64> {

View File

@@ -22,7 +22,7 @@ fn get((core, state): (Path<String>, Data<RwLock<SharedState>>)) -> HandlerResul
let core = core.to_string(); let core = core.to_string();
let context = state.read().unwrap(); let context = state.read().unwrap();
match context.db().core(core) { match context.db().core(&core) {
Ok(core) => ok_200(&Core::from(core)), Ok(core) => ok_200(&Core::from(core)),
Err(_) => error_404(), Err(_) => error_404(),
} }

View File

@@ -46,7 +46,7 @@ fn post((parameters, state): (Json<Filters>, Data<RwLock<SharedState>>)) -> Hand
match context.filter( match context.filter(
filter, filter,
core, core,
space.clone(), &space,
parameters.volume(), parameters.volume(),
&parameters.view_port, &parameters.view_port,
parameters.resolution(), parameters.resolution(),
@@ -69,7 +69,7 @@ fn post((parameters, state): (Json<Filters>, Data<RwLock<SharedState>>)) -> Hand
ok_200( ok_200(
&results &results
.drain() .drain()
.map(|x| Core::from(db.core(x).unwrap())) .map(|x| Core::from(db.core(&x).unwrap()))
.collect::<Vec<_>>(), .collect::<Vec<_>>(),
) )
} }

View File

@@ -64,7 +64,7 @@ impl Filters {
} }
} }
pub fn space(&self, db: &mercator_db::DataBase) -> Result<Option<String>, HandlerResult> { pub fn space(&self, db: &mercator_db::DataBase) -> Result<&Option<String>, HandlerResult> {
if let Some(space_id) = &self.space { if let Some(space_id) = &self.space {
if !db.space_keys().contains(&space_id.to_string()) { if !db.space_keys().contains(&space_id.to_string()) {
return Err(error_422(format!( return Err(error_422(format!(
@@ -73,19 +73,17 @@ impl Filters {
))); )));
} }
} }
Ok(self.space.clone()) Ok(&self.space)
} }
pub fn resolution(&self) -> Option<Vec<u32>> { pub fn resolution(&self) -> &Option<Vec<u32>> {
self.resolution.clone() &self.resolution
} }
pub fn volume(&self) -> Option<f64> { pub fn volume(&self) -> Option<f64> {
match &self.view_port { match &self.view_port {
None => None, None => None,
Some((low, high)) => { Some((low, high)) => Some(Shape::BoundingBox(low.into(), high.into()).volume()),
Some(Shape::BoundingBox(low.clone().into(), high.clone().into()).volume())
}
} }
} }
} }

View File

@@ -22,7 +22,7 @@ fn get((path, state): (Path<String>, Data<RwLock<SharedState>>)) -> HandlerResul
let name = path.to_string(); let name = path.to_string();
let context = state.read().unwrap(); let context = state.read().unwrap();
match context.db().space(name) { match context.db().space(&name) {
Ok(space) => { Ok(space) => {
let space: model::Space = space.into(); let space: model::Space = space.into();
ok_200(&space) ok_200(&space)

View File

@@ -47,7 +47,7 @@ fn post((parameters, state): (Json<Filters>, Data<RwLock<SharedState>>)) -> Hand
match context.filter( match context.filter(
filter, filter,
core, core,
space.clone(), &space,
parameters.volume(), parameters.volume(),
&parameters.view_port, &parameters.view_port,
parameters.resolution(), parameters.resolution(),
@@ -70,7 +70,7 @@ fn post((parameters, state): (Json<Filters>, Data<RwLock<SharedState>>)) -> Hand
ok_200( ok_200(
&results &results
.drain() .drain()
.map(|id| match db.space(id) { .map(|id| match db.space(&id) {
Err(_) => None, Err(_) => None,
Ok(x) => Some(model::Space::from(x)), Ok(x) => Some(model::Space::from(x)),
}) })

View File

@@ -33,10 +33,10 @@ fn get((path, state): (Path<(String, String)>, Data<RwLock<SharedState>>)) -> Ha
// Enforce highest resolution index. // Enforce highest resolution index.
threshold_volume: None, threshold_volume: None,
view_port: &None, view_port: &None,
resolution: Some(vec![0]), resolution: &Some(vec![0]),
}; };
match db.core(core) { match db.core(&core) {
Ok(core) => match core.get_by_id(&parameters, &id) { Ok(core) => match core.get_by_id(&parameters, &id) {
Ok(objects) => { Ok(objects) => {
let results = to_spatial_objects(db, objects); let results = to_spatial_objects(db, objects);

View File

@@ -25,7 +25,7 @@ fn post(
let context = state.read().unwrap(); let context = state.read().unwrap();
let db = context.db(); let db = context.db();
match db.core(core_id.clone()) { match db.core(&core_id) {
Err(_) => error_404(), Err(_) => error_404(),
Ok(core) => match parameters.space(db) { Ok(core) => match parameters.space(db) {
Err(e) => e, Err(e) => e,
@@ -33,7 +33,7 @@ fn post(
None => { None => {
let mut results = HashSet::new(); let mut results = HashSet::new();
for property in core.keys().iter() { for property in core.keys().iter() {
results.insert(property.id().clone()); results.insert(property.id());
} }
if parameters.ids_only() { if parameters.ids_only() {
@@ -73,7 +73,7 @@ fn post(
if parameters.ids_only() { if parameters.ids_only() {
let mut uniques = HashSet::new(); let mut uniques = HashSet::new();
for o in objects.iter() { for o in objects.iter() {
uniques.insert(o.value.id().clone()); uniques.insert(o.value.id());
} }
ok_200(&uniques.drain().collect::<Vec<_>>()) ok_200(&uniques.drain().collect::<Vec<_>>())

View File

@@ -36,10 +36,10 @@ impl SharedState {
&self, &self,
filter: &str, filter: &str,
core: &str, core: &str,
output_space: Option<String>, output_space: &Option<String>,
volume: Option<f64>, volume: Option<f64>,
view_port: &Option<(Vec<f64>, Vec<f64>)>, view_port: &Option<(Vec<f64>, Vec<f64>)>,
resolution: Option<Vec<u32>>, resolution: &Option<Vec<u32>>,
) -> mercator_db::ResultSet { ) -> mercator_db::ResultSet {
let parser = self.filter_parser(); let parser = self.filter_parser();
let parse; let parse;
@@ -98,7 +98,7 @@ impl SharedState {
core: &str, core: &str,
volume: Option<f64>, volume: Option<f64>,
view_port: &Option<(Vec<f64>, Vec<f64>)>, view_port: &Option<(Vec<f64>, Vec<f64>)>,
resolution: Option<Vec<u32>>, resolution: &Option<Vec<u32>>,
) -> mercator_db::ResultSet { ) -> mercator_db::ResultSet {
let parser = self.query_parser(); let parser = self.query_parser();
let parse; let parse;