source: branches/samba-3.5.x/pidl/lib/Parse/Pidl/Util.pm

Last change on this file was 414, checked in by Herwig Bauernfeind, 15 years ago

Samba 3.5.0: Initial import

File size: 3.2 KB
Line 
1###################################################
2# utility functions to support pidl
3# Copyright tridge@samba.org 2000
4# released under the GNU GPL
5package Parse::Pidl::Util;
6
7require Exporter;
8@ISA = qw(Exporter);
9@EXPORT = qw(has_property property_matches ParseExpr ParseExprExt is_constant make_str unmake_str print_uuid MyDumper);
10use vars qw($VERSION);
11$VERSION = '0.01';
12
13use strict;
14
15use Parse::Pidl::Expr;
16use Parse::Pidl qw(error);
17
18=head1 NAME
19
20Parse::Pidl::Util - Generic utility functions for pidl
21
22=head1 SYNOPSIS
23
24use Parse::Pidl::Util;
25
26=head1 DESCRIPTION
27
28Simple module that contains a couple of trivial helper functions
29used throughout the various pidl modules.
30
31=head1 FUNCTIONS
32
33=over 4
34
35=cut
36
37=item B<MyDumper>
38a dumper wrapper to prevent dependence on the Data::Dumper module
39unless we actually need it
40
41=cut
42
43sub MyDumper($)
44{
45 require Data::Dumper;
46 my $s = shift;
47 return Data::Dumper::Dumper($s);
48}
49
50=item B<has_property>
51see if a pidl property list contains a given property
52
53=cut
54sub has_property($$)
55{
56 my($e, $p) = @_;
57
58 return undef if (not defined($e->{PROPERTIES}));
59
60 return $e->{PROPERTIES}->{$p};
61}
62
63=item B<property_matches>
64see if a pidl property matches a value
65
66=cut
67sub property_matches($$$)
68{
69 my($e,$p,$v) = @_;
70
71 if (!defined has_property($e, $p)) {
72 return undef;
73 }
74
75 if ($e->{PROPERTIES}->{$p} =~ /$v/) {
76 return 1;
77 }
78
79 return undef;
80}
81
82=item B<is_constant>
83return 1 if the string is a C constant
84
85=cut
86sub is_constant($)
87{
88 my $s = shift;
89 return 1 if ($s =~ /^\d+$/);
90 return 1 if ($s =~ /^0x[0-9A-Fa-f]+$/);
91 return 0;
92}
93
94=item B<make_str>
95return a "" quoted string, unless already quoted
96
97=cut
98sub make_str($)
99{
100 my $str = shift;
101 if (substr($str, 0, 1) eq "\"") {
102 return $str;
103 }
104 return "\"$str\"";
105}
106
107=item B<unmake_str>
108unquote a "" quoted string
109
110=cut
111sub unmake_str($)
112{
113 my $str = shift;
114
115 $str =~ s/^\"(.*)\"$/$1/;
116
117 return $str;
118}
119
120=item B<print_uuid>
121Print C representation of a UUID.
122
123=cut
124sub print_uuid($)
125{
126 my ($uuid) = @_;
127 $uuid =~ s/"//g;
128 my ($time_low,$time_mid,$time_hi,$clock_seq,$node) = split /-/, $uuid;
129 return undef if not defined($node);
130
131 my @clock_seq = $clock_seq =~ /(..)/g;
132 my @node = $node =~ /(..)/g;
133
134 return "{0x$time_low,0x$time_mid,0x$time_hi," .
135 "{".join(',', map {"0x$_"} @clock_seq)."}," .
136 "{".join(',', map {"0x$_"} @node)."}}";
137}
138
139=item B<ParseExpr>
140Interpret an IDL expression, substituting particular variables.
141
142=cut
143sub ParseExpr($$$)
144{
145 my($expr, $varlist, $e) = @_;
146
147 my $x = new Parse::Pidl::Expr();
148
149 return $x->Run($expr, sub { my $x = shift; error($e, $x); },
150 # Lookup fn
151 sub { my $x = shift;
152 return($varlist->{$x}) if (defined($varlist->{$x}));
153 return $x;
154 },
155 undef, undef);
156}
157
158=item B<ParseExprExt>
159Interpret an IDL expression, substituting particular variables. Can call
160callbacks when pointers are being dereferenced or variables are being used.
161
162=cut
163sub ParseExprExt($$$$$)
164{
165 my($expr, $varlist, $e, $deref, $use) = @_;
166
167 my $x = new Parse::Pidl::Expr();
168
169 return $x->Run($expr, sub { my $x = shift; error($e, $x); },
170 # Lookup fn
171 sub { my $x = shift;
172 return($varlist->{$x}) if (defined($varlist->{$x}));
173 return $x;
174 },
175 $deref, $use);
176}
177
178=back
179
180=cut
181
1821;
Note: See TracBrowser for help on using the repository browser.