type indentification (exact width integer & complex-floating)

Hi everyone,

I'm trying to figure out how typedef and complex-floating types can
be identified (for VarDecls).

For the basic types I did:

VarDecl *variable;
auto builtinType = variable->getType()->getAs<BuiltinType>();
switch (builtinType->getKind()) {
     case BuiltinType::Int: //...
     case BuiltinType::Long: //...

For the typedefs I'm trying identify exact width
int types like: int8_t, uint16_t etc..

For the complex-float types I'd like to identify those:
float _Complex
double _Complex
long double _Complex

Any ideas?

Best Regards,
Alex