Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

Changeset 1604

Show
Ignore:
Timestamp:
08/04/05 23:20:55 (3 years ago)
Author:
nahi
Message:

various mere changes for performance. just 5% or so. Hmm...

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/soap/baseData.rb

    r1603 r1604  
    4545 
    4646  def initialize(*arg) 
    47     super(*arg) 
     47    super 
    4848    @encodingstyle = nil 
    49     @elename = XSD::QName.new 
     49    @elename = XSD::QName::EMPTY 
    5050    @id = nil 
    5151    @precedents = [] 
     
    8383 
    8484  def initialize(*arg) 
    85     super(*arg) 
     85    super 
    8686  end 
    8787end 
     
    9696 
    9797  def initialize(*arg) 
    98     super(*arg) 
     98    super 
    9999  end 
    100100end 
     
    115115  def initialize(obj = nil) 
    116116    super() 
    117     @type = XSD::QName.new 
     117    @type = XSD::QName::EMPTY 
    118118    @refid = nil 
    119119    @obj = nil 
     
    179179  def initialize 
    180180    super() 
    181     @type = XSD::QName.new 
     181    @type = XSD::QName::EMPTY 
    182182  end 
    183183 
     
    400400  def initialize(type = nil) 
    401401    super() 
    402     @type = type || XSD::QName.new 
     402    @type = type || XSD::QName::EMPTY 
    403403    @array = [] 
    404404    @data = [] 
     
    754754 
    755755    if value.is_a?(SOAPType) 
    756       value.elename = value.elename.dup_name('item') 
    757        
     756      value.elename = ITEM_NAME 
    758757      # Sync type 
    759758      unless @type.name 
     
    761760          SOAPArray.create_arytype(value.type.name, @rank)) 
    762761      end 
    763  
    764       unless value.type 
    765         value.type = @type 
    766       end 
     762      value.type ||= @type 
    767763    end 
    768764 
     
    794790      else 
    795791        new_obj = block.call(ele) 
    796         new_obj.elename = new_obj.elename.dup_name('item') 
     792        new_obj.elename = ITEM_NAME 
    797793        new_obj 
    798794      end 
     
    845841 
    846842private 
     843 
     844  ITEM_NAME = XSD::QName.new(nil, 'item') 
    847845 
    848846  def retrieve(idxary) 
  • trunk/lib/soap/generator.rb

    r1596 r1604  
    7272      add_reftarget(obj.elename.name, obj) 
    7373      ref = SOAPReference.new(obj) 
    74       ref.elename.name = obj.elename.name 
     74      ref.elename = ref.elename.dup_name(obj.elename.name) 
    7575      obj.precedents.clear      # Avoid cyclic delay. 
    7676      obj.encodingstyle = parent.encodingstyle 
  • trunk/lib/soap/mapping/mapping.rb

    r1597 r1604  
    2323  # TraverseSupport breaks following thread variables. 
    2424  #   Thread.current[:SOAPMarshalDataKey] 
    25   #   Thread.current[:SOAPExternalCES] 
    2625  module TraverseSupport 
    2726    def mark_marshalled_obj(obj, soap_obj) 
     
    4140  def self.obj2soap(obj, registry = nil, type = nil, opt = EMPTY_OPT) 
    4241    registry ||= Mapping::DefaultRegistry 
    43     prekey = Thread.current[:SOAPMarshalDataKey] 
    44     preces = Thread.current[:SOAPExternalCES] 
    45     begin 
     42    soap_obj = nil 
     43    protect_threadvars(:SOAPMarshalDataKey, :SOAPExternalCES, :SOAPMarshalNoReference) do 
    4644      Thread.current[:SOAPMarshalDataKey] = {} 
    4745      Thread.current[:SOAPExternalCES] = opt[:external_ces] || $KCODE 
     46      Thread.current[:SOAPMarshalNoReference] = opt[:no_reference] 
    4847      soap_obj = _obj2soap(obj, registry, type) 
    49     ensure 
    50       Thread.current[:SOAPMarshalDataKey] = prekey 
    51       Thread.current[:SOAPExternalCES] = preces 
    5248    end 
    5349    soap_obj 
     
    5652  def self.soap2obj(node, registry = nil, klass = nil, opt = EMPTY_OPT) 
    5753    registry ||= Mapping::DefaultRegistry 
    58     prekey = Thread.current[:SOAPMarshalDataKey] 
    59     preces = Thread.current[:SOAPExternalCES] 
    60     begin 
     54    obj = nil 
     55    protect_threadvars(:SOAPMarshalDataKey, :SOAPExternalCES, :SOAPMarshalNoReference) do 
    6156      Thread.current[:SOAPMarshalDataKey] = {} 
    6257      Thread.current[:SOAPExternalCES] = opt[:external_ces] || $KCODE 
     58      Thread.current[:SOAPMarshalNoReference] = opt[:no_reference] 
    6359      obj = _soap2obj(node, registry, klass) 
    64     ensure 
    65       Thread.current[:SOAPMarshalDataKey] = prekey 
    66       Thread.current[:SOAPExternalCES] = preces 
    6760    end 
    6861    obj 
     
    7366    type = XSD::QName.new(type_ns, typename) 
    7467    soap_ary = SOAPArray.new(ValueArrayName, 1, type) 
    75     prekey = Thread.current[:SOAPMarshalDataKey] 
    76     preces = Thread.current[:SOAPExternalCES] 
    77     begin 
     68    protect_threadvars(:SOAPMarshalDataKey, :SOAPExternalCES, :SOAPMarshalNoReference) do 
    7869      Thread.current[:SOAPMarshalDataKey] = {} 
    7970      Thread.current[:SOAPExternalCES] = opt[:external_ces] || $KCODE 
     71      Thread.current[:SOAPMarshalNoReference] = opt[:no_reference] 
    8072      ary.each do |ele| 
    8173        soap_ary.add(_obj2soap(ele, registry, type)) 
    8274      end 
    83     ensure 
    84       Thread.current[:SOAPMarshalDataKey] = prekey 
    85       Thread.current[:SOAPExternalCES] = preces 
    8675    end 
    8776    soap_ary 
     
    9281    type = XSD::QName.new(type_ns, typename) 
    9382    md_ary = SOAPArray.new(ValueArrayName, rank, type) 
    94     prekey = Thread.current[:SOAPMarshalDataKey] 
    95     preces = Thread.current[:SOAPExternalCES] 
    96     begin 
     83    protect_threadvars(:SOAPMarshalDataKey, :SOAPExternalCES, :SOAPMarshalNoReference) do 
    9784      Thread.current[:SOAPMarshalDataKey] = {} 
    9885      Thread.current[:SOAPExternalCES] = opt[:external_ces] || $KCODE 
     86      Thread.current[:SOAPMarshalNoReference] = opt[:no_reference] 
    9987      add_md_ary(md_ary, ary, [], registry) 
    100     ensure 
    101       Thread.current[:SOAPMarshalDataKey] = prekey 
    102       Thread.current[:SOAPExternalCES] = preces 
    10388    end 
    10489    md_ary 
     
    136121 
    137122  def self._obj2soap(obj, registry, type = nil) 
    138     if referent = Thread.current[:SOAPMarshalDataKey][obj.__id__] 
     123    if referent = Thread.current[:SOAPMarshalDataKey][obj.__id__] and 
     124        !Thread.current[:SOAPMarshalNoReference] 
    139125      SOAPReference.new(referent) 
    140126    elsif registry 
     
    151137      target = node.__getobj__ 
    152138      # target.id is not Object#id but SOAPReference#id 
    153       if referent = Thread.current[:SOAPMarshalDataKey][target.id] 
     139      if referent = Thread.current[:SOAPMarshalDataKey][target.id] and 
     140          !Thread.current[:SOAPMarshalNoReference] 
    154141        return referent 
    155142      else 
     
    250237 
    251238  def self.class2qname(klass) 
    252     name = if klass.class_variables.include?('@@schema_type') 
    253         klass.class_eval('@@schema_type') 
    254       else 
    255         nil 
    256       end 
    257     namespace = if klass.class_variables.include?('@@schema_ns') 
    258         klass.class_eval('@@schema_ns') 
    259       else 
    260         nil 
    261       end 
     239    name = schema_type_definition(klass) 
     240    namespace = schema_ns_definition(klass) 
    262241    XSD::QName.new(namespace, name) 
    263242  end 
     
    335314  end 
    336315 
     316  def self.schema_type_definition(klass) 
     317    class_schema_variable(:schema_type, klass) 
     318  end 
     319 
     320  def self.schema_ns_definition(klass) 
     321    class_schema_variable(:schema_ns, klass) 
     322  end 
     323 
    337324  def self.schema_element_definition(klass) 
    338     return nil unless klass.class_variables.include?('@@schema_element') 
     325    schema_element = class_schema_variable(:schema_element, klass) or return nil 
     326    schema_ns = schema_ns_definition(klass) 
    339327    elements = [] 
    340328    as_array = [] 
    341     schema_ns = klass.class_eval('@@schema_ns') 
    342     klass.class_eval('@@schema_element').each do |varname, definition| 
     329    schema_element.each do |varname, definition| 
    343330      class_name, name = definition 
    344331      if /\[\]$/ =~ class_name 
     
    352339 
    353340  def self.schema_attribute_definition(klass) 
    354     return nil unless klass.class_variables.include?('@@schema_attribute') 
    355     klass.class_eval('@@schema_attribute') 
     341    class_schema_variable(:schema_attribute, klass) 
    356342  end 
    357343 
    358344  class << Mapping 
    359345  private 
     346 
     347    def class_schema_variable(sym, klass) 
     348      var = "@@#{sym}" 
     349      klass.class_variables.include?(var) ? klass.class_eval(var) : nil 
     350    end 
     351 
     352    def protect_threadvars(*symbols) 
     353      backup = {} 
     354      begin 
     355        symbols.each do |sym| 
     356          backup[sym] = Thread.current[sym] 
     357        end 
     358        yield 
     359      ensure 
     360        symbols.each do |sym| 
     361          Thread.current[sym] = backup[sym] 
     362        end 
     363      end 
     364    end 
     365 
    360366    def add_md_ary(md_ary, ary, indices, registry) 
    361367      for idx in 0..(ary.size - 1) 
  • trunk/lib/soap/mapping/wsdlliteralregistry.rb

    r1597 r1604  
    4646    if @excn_handler_obj2soap 
    4747      soap_obj = @excn_handler_obj2soap.call(obj) { |yield_obj| 
    48         Mapping._obj2soap(yield_obj, self
     48        Mapping.obj2soap(yield_obj, nil, nil, MAPPING_OPT
    4949      } 
    5050      return soap_obj if soap_obj 
     
    6363      begin 
    6464        return @excn_handler_soap2obj.call(node) { |yield_node| 
    65             Mapping._soap2obj(yield_node, self
     65            Mapping.soap2obj(yield_node, nil, nil, MAPPING_OPT
    6666          } 
    6767      rescue Exception 
     
    7676 
    7777private 
     78 
     79  MAPPING_OPT = { :no_reference => true } 
    7880 
    7981  def obj2elesoap(obj, ele) 
     
    162164      # SOAPStruct, etc. is used instead of SOAPElement. 
    163165      begin 
    164         ele = Mapping.obj2soap(obj
     166        ele = Mapping.obj2soap(obj, nil, nil, MAPPING_OPT
    165167        ele.elename = qname 
    166168        ele 
     
    268270      soapele2plainobj(node) 
    269271    else 
    270       obj = Mapping._soap2obj(node, Mapping::DefaultRegistry, obj_class
     272      obj = Mapping.soap2obj(node, nil, obj_class, MAPPING_OPT
    271273      add_attributes2plainobj(node, obj) 
    272274      obj 
  • trunk/lib/xsd/codegen/gensupport.rb

    r1539 r1604  
    11# XSD4R - Code generation support 
    2 # Copyright (C) 2004  NAKAMURA, Hiroshi <nahi@ruby-lang.org>. 
     2# Copyright (C) 2004, 2005  NAKAMURA, Hiroshi <nahi@ruby-lang.org>. 
    33 
    44# This program is copyrighted free software by NAKAMURA, Hiroshi.  You can 
     
    1111 
    1212# from the file 'keywords' in 1.9. 
    13 KEYWORD = %w( 
     13KEYWORD = {} 
     14%w( 
    1415__LINE__ 
    1516__FILE__ 
     
    5253while 
    5354yield 
    54 ) 
     55).each { |k| KEYWORD[k] = nil } 
    5556 
    5657module GenSupport 
     
    9798 
    9899  def safevarname(name) 
    99     safename = name.scan(/[a-zA-Z0-9_]+/).join('_') 
    100     safename = uncapitalize(safename) 
     100    safename = uncapitalize(name.scan(/[a-zA-Z0-9_]+/).join('_')) 
    101101    if /^[a-z]/ !~ safename or keyword?(safename) 
    102       safename = "v_#{safename}" 
     102      "v_#{safename}" 
     103    else 
     104      safename 
    103105    end 
    104     safename 
    105106  end 
    106107  module_function :safevarname 
     
    112113 
    113114  def keyword?(word) 
    114     KEYWORD.include?(word) 
     115    KEYWORD.key?(word) 
    115116  end 
    116117  module_function :keyword? 
  • trunk/lib/xsd/ns.rb

    r1520 r1604  
    7373      name.name 
    7474    elsif @ns2tag.key?(name.namespace) 
    75       @ns2tag[name.namespace] + ':' << name.name 
     75      "#{@ns2tag[name.namespace]}:#{name.name}" 
    7676    else 
    7777      raise FormatError.new("namespace: #{name.namespace} not defined yet") 
  • trunk/lib/xsd/qname.rb

    r1540 r1604  
    3232 
    3333  def match(rhs) 
    34     unless self.class === rhs 
    35       return false 
    36     end 
    3734    if rhs.namespace and (rhs.namespace != @namespace) 
    3835      return false 
     
    4542 
    4643  def ==(rhs) 
    47     (self.class === rhs && @namespace == rhs.namespace && @name == rhs.name) 
     44    !rhs.nil? and @namespace == rhs.namespace and @name == rhs.name 
    4845  end 
    4946 
     
    7471    self.new($1, $2) 
    7572  end 
     73 
     74  EMPTY = QName.new.freeze 
    7675end 
    7776