From 87d1f955515646596f044747bea51420a7d5d4d3 Mon Sep 17 00:00:00 2001 From: miloyip Date: Sun, 17 May 2015 18:06:43 +0800 Subject: [PATCH] Use state allocator for creating parallel validators --- include/rapidjson/schema.h | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/include/rapidjson/schema.h b/include/rapidjson/schema.h index 2a579fc..0e86d4f 100644 --- a/include/rapidjson/schema.h +++ b/include/rapidjson/schema.h @@ -288,7 +288,6 @@ struct SchemaValidationContext { ISchemaValidator** patternPropertiesValidators; SizeType patternPropertiesValidatorCount; const SchemaType** patternPropertiesSchemas; - //ISchemaValidator* notValidator; SizeType patternPropertiesSchemaCount; PatternValidatorType valuePatternValidatorType; PatternValidatorType objectPatternValidatorType; @@ -1286,8 +1285,10 @@ private: struct SchemaEntry { SchemaEntry(const PointerType& p, SchemaType* s, bool o) : pointer(p), schema(s), owned(o) {} ~SchemaEntry() { - if (owned) + if (owned) { schema->~SchemaType(); + Allocator::Free(schema); + } } PointerType pointer; SchemaType* schema; @@ -1551,25 +1552,17 @@ RAPIDJSON_MULTILINEMACRO_END // Implementation of ISchemaStateFactory virtual ISchemaValidator* CreateSchemaValidator(const SchemaType& root) { - return new GenericSchemaValidator(*schemaDocument_, root + return new (GetStateAllocator().Malloc(sizeof(GenericSchemaValidator))) GenericSchemaValidator(*schemaDocument_, root #if RAPIDJSON_SCHEMA_VERBOSE , depth_ + 1 #endif ); - -// GenericSchemaValidator *validator = GetStateAllocator().Malloc(sizeof(GenericSchemaValidator)); -// new (validator) GenericSchemaValidator(*schemaDocument_, root -// #if RAPIDJSON_SCHEMA_VERBOSE -// , depth_ + 1 -// #endif -// ); -// return validator; } virtual void DestroySchemaValidator(ISchemaValidator* validator) { - delete validator; - // validator->~ISchemaValidator(); - // StateAllocator::Free(validator); + GenericSchemaValidator* v = static_cast(validator); + v->~GenericSchemaValidator(); + StateAllocator::Free(v); } private: