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 == "::" @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_namespace ⇒ Object
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_path ⇒ Object
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_name ⇒ Object
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
|
7745
7746
7747
|
# File 'lib/tecsgen/core/componentobj.rb', line 7745
def get_name
@path[@path.length - 1]
end
|
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_str ⇒ Object
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
7789
7790
7791
|
# File 'lib/tecsgen/core/componentobj.rb', line 7789
def is_absolute?
@b_absolute
end
|
#is_name_only? ⇒ Boolean
7793
7794
7795
|
# File 'lib/tecsgen/core/componentobj.rb', line 7793
def is_name_only?
@path.length == 1 && @b_absolute == false
end
|
#set_clone ⇒ Object
7741
7742
7743
|
# File 'lib/tecsgen/core/componentobj.rb', line 7741
def set_clone
@path = @path.clone
end
|
NamespacePath:: path 文字列を得る
CDL 用の path 文字列を生成
7767
7768
7769
|
# File 'lib/tecsgen/core/componentobj.rb', line 7767
def to_s
get_path_str
end
|