mirror of
https://codeberg.org/demostf/parser.git
synced 2026-06-03 18:24:05 +02:00
refcount propnames
This commit is contained in:
parent
570de16b16
commit
e54f0f35fc
2 changed files with 34 additions and 5 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
use bitstream_reader::{BitRead, LittleEndian};
|
use bitstream_reader::{BitRead, LittleEndian};
|
||||||
|
|
||||||
use crate::demo::sendprop::{SendPropDefinition, SendPropFlag, SendPropType};
|
use crate::demo::sendprop::{SendPropDefinition, SendPropFlag, SendPropName, SendPropType};
|
||||||
use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
|
use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::cell::{Cell, RefCell};
|
use std::cell::{Cell, RefCell};
|
||||||
|
|
@ -166,12 +166,12 @@ impl ParseSendTable {
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
struct Exclude<'a> {
|
struct Exclude<'a> {
|
||||||
table: &'a SendTableName,
|
table: &'a SendTableName,
|
||||||
prop: &'a str,
|
prop: &'a SendPropName,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Exclude<'a> {
|
impl<'a> Exclude<'a> {
|
||||||
pub fn matches(&self, prop: &SendPropDefinition) -> bool {
|
pub fn matches(&self, prop: &SendPropDefinition) -> bool {
|
||||||
self.table == &prop.owner_table && self.prop == prop.name
|
self.table == &prop.owner_table && *self.prop == prop.name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,40 @@ use super::vector::{Vector, VectorXY};
|
||||||
use crate::demo::message::stringtable::log_base2;
|
use crate::demo::message::stringtable::log_base2;
|
||||||
use crate::demo::packet::datatable::SendTableName;
|
use crate::demo::packet::datatable::SendTableName;
|
||||||
use std::convert::TryInto;
|
use std::convert::TryInto;
|
||||||
|
use std::fmt;
|
||||||
|
use std::rc::Rc;
|
||||||
|
|
||||||
|
#[derive(PartialEq, Eq, Hash, Debug)]
|
||||||
|
pub struct SendPropName(Rc<String>);
|
||||||
|
|
||||||
|
impl Clone for SendPropName {
|
||||||
|
fn clone(&self) -> Self {
|
||||||
|
SendPropName(Rc::clone(&self.0))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for SendPropName {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
write!(f, "{}", self.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<String> for SendPropName {
|
||||||
|
fn from(value: String) -> Self {
|
||||||
|
Self(Rc::new(value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BitRead<LittleEndian> for SendPropName {
|
||||||
|
fn read(stream: &mut Stream) -> ReadResult<Self> {
|
||||||
|
String::read(stream).map(SendPropName::from)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq)]
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
pub struct SendPropDefinition {
|
pub struct SendPropDefinition {
|
||||||
pub prop_type: SendPropType,
|
pub prop_type: SendPropType,
|
||||||
pub name: String,
|
pub name: SendPropName,
|
||||||
pub flags: SendPropFlags,
|
pub flags: SendPropFlags,
|
||||||
pub table_name: Option<SendTableName>,
|
pub table_name: Option<SendTableName>,
|
||||||
pub owner_table: SendTableName,
|
pub owner_table: SendTableName,
|
||||||
|
|
@ -55,7 +84,7 @@ impl SendPropDefinition {
|
||||||
|
|
||||||
pub fn read(stream: &mut Stream, owner_table: SendTableName) -> ReadResult<Self> {
|
pub fn read(stream: &mut Stream, owner_table: SendTableName) -> ReadResult<Self> {
|
||||||
let prop_type = SendPropType::read(stream)?;
|
let prop_type = SendPropType::read(stream)?;
|
||||||
let name = stream.read_string(None)?;
|
let name = stream.read_string(None)?.into();
|
||||||
let flags = SendPropFlags::read(stream)?;
|
let flags = SendPropFlags::read(stream)?;
|
||||||
let mut table_name = None;
|
let mut table_name = None;
|
||||||
let mut element_count = None;
|
let mut element_count = None;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue