Class: NamespacePath

Inherits:
Node show all
Defined in:
lib/tecsgen/core/componentobj.rb

Overview

名前空間パス

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Node

#cdl_error, #cdl_error2, #cdl_error3, #cdl_info, #cdl_info2, #cdl_warning, #cdl_warning2, #get_locale, #locale_str, #set_locale

Constructor Details

#initialize(ident, b_absolute, namespace = nil) ⇒ NamespacePath

NamespacePath# initialize

ident::Symbol 最初の名前, ただし “::” のみの場合は String b_absolute:Bool “::” で始まっている場合 true namespace::Namespace b_absolute = false かつ、構文解釈段階以外で呼び出す場合は、必ず指定すること



7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
# File 'lib/tecsgen/core/componentobj.rb', line 7698

def initialize(ident, b_absolute, namespace = nil)
  super()

  if ident == "::" # RootNamespace
    @path = []
    @b_absolute = true
  else
    @path = [ident]
    @b_absolute = b_absolute
  end

  if namespace
    @namespace = namespace
    if b_absolute == true
      raise "NamespacePath#initialize: naamespace specified for absolute path"
    end
  else
    if b_absolute == false
      @namespace = Namespace.get_current
    else
      @namespace = nil
    end
  end
end

Class Method Details

.analyze(path_str, b_force_absolute = false) ⇒ Object

NamespacePath:: 分解して NamespacePath インスタンスを生成する

path_str

String : namespace または region のパス ex) “::path::A” , “::”, “ident”

b_force_absolute

Bool : “::” で始まっていない場合でも絶対パスに扱う

NamespacePath は通常構文解析されて作成される このメソッドは、オプションなどで指定される文字列を分解して NamespacePath を生成するのに用いる チェックはゆるい。不適切なパス指定は、不適切な NamespacePath が生成される



7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
# File 'lib/tecsgen/core/componentobj.rb', line 7847

def self.analyze(path_str, b_force_absolute = false)
  if path_str == "::"
    return self.new("::", true)
  end

  pa = path_str.split("::")
  if pa[0] == ""
    pa.shift
    b_absolute = true
  else
    if b_force_absolute
      b_absolute = true
    else
      b_absolute = false
    end
  end

  if pa[0]
    nsp = self.new(pa[0].to_sym, b_absolute)
  else
    nsp = self.new("::", b_absolute)
  end
  pa.shift

  pa.each{|a|
    if a
      nsp.append! a.to_sym
    else
      nsp.append! "::"
    end
  }

  return nsp
end

Instance Method Details

#append(ident) ⇒ Object

NamespacePath# append する

このメソッドは、元の NamespacePath オブジェクトを変形しない

RETURN

複製した NamespacePath



7734
7735
7736
7737
7738
7739
# File 'lib/tecsgen/core/componentobj.rb', line 7734

def append(ident)
  cl = self.clone
  cl.set_clone
  cl.append!(ident)
  return cl
end

#append!(ident) ⇒ Object

NamespacePath# append する

RETURN self このメソッドは、元の NamespacePath オブジェクトを変形して返す



7726
7727
7728
7729
# File 'lib/tecsgen/core/componentobj.rb', line 7726

def append!(ident)
  @path << ident
  return self
end

#change_name(name) ⇒ Object Also known as: change_name_clone

NamespacePath#クローンを作成して名前を変更する



7750
7751
7752
7753
7754
7755
# File 'lib/tecsgen/core/componentobj.rb', line 7750

def change_name(name)
  cl = self.clone
  cl.set_clone
  cl.change_name_no_clone name
  return cl
end

#change_name_no_clone(name) ⇒ Object

NamespacePath#名前を変更する

このインスタンスを参照するすべてに影響を与えることに注意



7760
7761
7762
7763
# File 'lib/tecsgen/core/componentobj.rb', line 7760

def change_name_no_clone(name)
  @path[@path.length - 1] = name
  nil
end

#get_base_namespaceObject

NamespacePath:: 相対パスのベースとなる namespace

is_absolute? == false の時のみ有効な値を返す (true なら nil)



7818
7819
7820
# File 'lib/tecsgen/core/componentobj.rb', line 7818

def get_base_namespace
  @namespace
end

#get_full_pathObject

NamespacePath#フルパスの配列を返す

返された配列を書き換えてはならない



7808
7809
7810
7811
7812
7813
7814
# File 'lib/tecsgen/core/componentobj.rb', line 7808

def get_full_path
  if @b_absolute
    return @path
  else
    return @namespace.get_namespace_path.get_full_path.clone + @path
  end
end

#get_global_nameObject

NamespacePath:: C 言語グローバル名を得る



7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
# File 'lib/tecsgen/core/componentobj.rb', line 7823

def get_global_name
  if @b_absolute
    global_name = ""
  else
    global_name = @namespace.get_global_name
  end

  @path.each{|n|
    if global_name != ""
      global_name = "#{global_name}_#{n}"
    else
      global_name = n.to_s
    end
  }
  global_name
end

#get_nameObject



7745
7746
7747
# File 'lib/tecsgen/core/componentobj.rb', line 7745

def get_name
  @path[@path.length - 1]
end

#get_pathObject

NamespacePath:: パスの配列を返す

is_absolute? true の場合、ルートからのパス

false の場合、base_namespace からの相対

ルート namespace の場合、長さ0の配列を返す



7802
7803
7804
# File 'lib/tecsgen/core/componentobj.rb', line 7802

def get_path
  @path
end

#get_path_strObject



7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
# File 'lib/tecsgen/core/componentobj.rb', line 7771

def get_path_str
  first = true
  if @b_absolute
    path = "::"
  else
    path = ""
  end
  @path.each{|n|
    if first
      path = "#{path}#{n}"
      first = false
    else
      path += "::#{n}"
    end
  }
  return path
end

#is_absolute?Boolean

Returns:

  • (Boolean)


7789
7790
7791
# File 'lib/tecsgen/core/componentobj.rb', line 7789

def is_absolute?
  @b_absolute
end

#is_name_only?Boolean

Returns:

  • (Boolean)


7793
7794
7795
# File 'lib/tecsgen/core/componentobj.rb', line 7793

def is_name_only?
  @path.length == 1 && @b_absolute == false
end

#set_cloneObject



7741
7742
7743
# File 'lib/tecsgen/core/componentobj.rb', line 7741

def set_clone
  @path = @path.clone
end

#to_sObject

NamespacePath:: path 文字列を得る

CDL 用の path 文字列を生成



7767
7768
7769
# File 'lib/tecsgen/core/componentobj.rb', line 7767

def to_s
  get_path_str
end